Golang pointer receiver is nil

pointer receiver  为nil 时 ,函数依然可以正常执行,只有保证执行方面中没有调用receiver相关属性或方法。 这个 Java 中 对象为空,调用方法时出现NullPointerException 完全不一样。

package main

import (
	"fmt"
)

type Cat struct {
}

func (c *Cat) Speak() string {
	return "Cat Speak!"
}


func main() {
     var cat *Cat 
     fmt.Println(cat)
     fmt.Println(cat.Speak())
}


// output 

Cat Speak!

如果是value  receiver 使用pointer receiver 调用会编译错误

package main

import (
	"fmt"
)

type Cat struct {
}

func (c Cat) Speak() string {
	return "Cat Speak!"
}


func main() {
     var cat *Cat 
     fmt.Println(cat)
     fmt.Println(cat.Speak())
}

//output 

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0xffffffff addr=0x0 pc=0xe0244]

goroutine 1 [running]:
main.main()
	/tmp/sandbox321387350/prog.go:18 +0x84

 

你可能感兴趣的:(golang)