11-if/questions/5-short-if.md
package main
import (
"fmt"
"time"
)
func main() {
if err != nil; d, err := time.ParseDuration("1h10s") {
fmt.Println(d)
}
}
err != nil check. CORRECT1: Yes. In a short if statement, the simple statement (the short declaration there) should be the first part of it. Then, after the semicolon separator, there should be a condition expression.
2: You don't want that. That's not the issue here.
package main
import "fmt"
func main() {
done := false
if done := true; done {
fmt.Println(done)
}
fmt.Println(done)
}
3: Yes. It shadows the main()'s done variable, and inside the if statement, it prints "true". Then, after the if statement ends, it prints the main()'s done variable which is "false".
How can you fix this it?
package main
import (
"fmt"
"strconv"
)
func main() {
var n int
if n, err := strconv.Atoi("10"); err != nil {
fmt.Printf("error: %s (n: %d)", err, n)
return
}
fmt.Println(n)
}
See the code also in here: https://play.golang.org/p/fDrmcXWGnQB
1: That will break the program. Because, the last line prints it.
2: The program uses it to set the n.
3: There will be "unused variable" error. 4: Yes, that will solve the shadowing issue. Short-if will reuse the same 'n' variable (main()'s n). So, the converted number 'n' will be printed as: 10. See the solution here: https://play.golang.org/p/6jc-nZJNHYb