面试题答案
一键面试- 方法接收者为值类型:
- 值类型变量可以直接调用接收者为值类型的方法。例如:
type Person struct { Name string } func (p Person) SayHello() { println("Hello, my name is", p.Name) } func main() { var p Person p.Name = "Tom" p.SayHello() }
- 指针类型变量也可以调用接收者为值类型的方法,Go语言会自动解引用指针。例如:
type Person struct { Name string } func (p Person) SayHello() { println("Hello, my name is", p.Name) } func main() { p := &Person{Name: "Tom"} p.SayHello() }
- 方法接收者为指针类型:
- 指针类型变量可以直接调用接收者为指针类型的方法。例如:
type Person struct { Name string } func (p *Person) ChangeName(newName string) { p.Name = newName } func main() { p := &Person{Name: "Tom"} p.ChangeName("Jerry") }
- 值类型变量不能直接调用接收者为指针类型的方法,否则会编译报错。如果要调用,需要先将值类型变量转换为指针类型。例如:
type Person struct { Name string } func (p *Person) ChangeName(newName string) { p.Name = newName } func main() { var p Person p.Name = "Tom" // 下面这行代码会报错,需要改成(&p).ChangeName("Jerry") // p.ChangeName("Jerry") (&p).ChangeName("Jerry") }