2 回答
TA贡献1865条经验 获得超7个赞
nil只要您不取消引用接收器本身,就可以使用接收器调用方法。
这意味着以下作品游乐场:
package main
import (
"fmt"
)
type foo struct {
val int
}
func (f *foo) Print() {
fmt.Println("Receiver:", f)
}
func (f *foo) PrintVal() {
fmt.Println("Val: ", f.val)
}
func main() {
var f *foo
f.Print()
//f.PrintVal()
}
f.Print()工作没有问题,因为我们只是打印一个指针,我们不想取消引用它。
但是,f.PrintVal尝试取消引用nil指针,导致恐慌。
如有疑问,请记住此示例中的方法等效于将接收器作为第一个参数的函数:
func Print(f *foo)
func PrintVal(f *foo)
这在方法声明下的规范中提到:
方法的类型是以接收者为第一个参数的函数的类型。例如,方法 Scale 具有类型
func(p *Point, factor float64)
但是,以这种方式声明的函数不是方法。
这清楚地表明接收器没有什么特别的,nil只要你不取消引用它就可以。
TA贡献1946条经验 获得超3个赞
使用 nil-receiver 调用未初始化结构的方法。如果在使用该接收器的方法中,您会感到恐慌。使用 nil 接收器调用方法是有效的,并且该方法可以通过检查接收器是否为 nil 来修改其行为。
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报
