看这样一段代码
package main
import (
"fmt"
"errors"
"strings"
)
func parseName(name string) (parsed string, err error) {
if name == "" {
err = errors.New("empty string")
} else {
parsed = strings.ToLower(name)
}
return
}
func hello(name string) (err error) {
if parsed, err := parseName(name); err == nil {
fmt.Println("Hello,", parsed)
}
return
}
func main() {
if err := hello(""); err != nil {
fmt.Println(err)
}
}
最后控制台输出的并不是"empty string"!这是因为if parsed, err := parseName(name); err == nil {
这里的err是一个只属于if block的新的局部变量,所以hello的返回值err仍然为nil。如果改成下面的代码就ok了:
func hello(name string) (err error) {
parsed, err := parseName(name)
if err == nil {
fmt.Println("Hello,", parsed)
}
return
}