85 lines
2.1 KiB
Markdown
85 lines
2.1 KiB
Markdown
## How to fix this program?
|
||
```go
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"time"
|
||
)
|
||
|
||
func main() {
|
||
if err != nil; d, err := time.ParseDuration("1h10s") {
|
||
fmt.Println(d)
|
||
}
|
||
}
|
||
```
|
||
1. Swap the simple statement with the `err != nil` check. *CORRECT*
|
||
2. Remove the error handling.
|
||
3. Remove the semicolon.
|
||
4. Change the short declaration to an assignment.
|
||
|
||
> **1:** 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.
|
||
|
||
|
||
## What does this program print?
|
||
```go
|
||
package main
|
||
import "fmt"
|
||
|
||
func main() {
|
||
done := false
|
||
if done := true; done {
|
||
fmt.Println(done)
|
||
}
|
||
fmt.Println(done)
|
||
}
|
||
```
|
||
1. true and true
|
||
2. false and false
|
||
3. true and false *CORRECT*
|
||
4. false and true
|
||
|
||
> **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".
|
||
|
||
|
||
## There's a shadowing issue in this program. The program should print: 10, now it prints: 0.
|
||
|
||
**How can you fix this it?**
|
||
|
||
```go
|
||
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. Remove the first declaration (main()'s n variable).
|
||
2. Remove the declaration in the short-if (if's n).
|
||
3. Declare an error variable outside of the main.
|
||
4. Declare an error variable along with main's n variable, then change the short-if declaration to an assignment. *CORRECT*
|
||
|
||
> **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
|
||
|