在 loadpage 函数中,您返回两个值,一个是指向 Page 的指针,另一个是错误。
func loadPage(title string) (*Page, error) {
filename := title + ".txt"
body, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
return &Page{Title: title, Body: body}, nil
}
这就是代码中有错误并且不等于nil的原因。然后返回错误。但是由于您还需要返回 Page 它也应该是 nil ,因为它表示指针的零值。这表明 Page 的值为空。
return &Page{Title: title, Body: body}, nil
但是如果没有错误,那么您将再次返回两个值,一个是 Page 结构的地址,其值分配给 Page 字段,但 nil 表示错误。
如果一个类型的值不包含任何值。它应该用零值初始化,即
false 表示布尔值,0 表示数字类型,"" 表示字符串,nil 表示
指针、函数、接口、切片、通道和映射。
一个或多个返回值可以在“return”语句中明确列出。每个表达式必须是单值的,并且可以分配给函数结果类型的相应元素。
func complexF1() (re float64, im float64) {
return -7.0, -4.0
}
“return”语句中的表达式列表可能是对多值函数的一次调用。效果就像从该函数返回的每个值都分配给具有相应值类型的临时变量,然后是列出这些变量的“return”语句,此时适用前一种情况的规则。
func complexF2() (re float64, im float64) {
return complexF1()
}
注意:
不管它们是如何声明的,所有的结果值都是
在进入
功能。指定结果的“return”语句设置结果
执行任何延迟函数之前的参数。
查看 Return statements 的 Golang 规范