Golang入门到项目实战 | golang接口值类型接收者和指针类型接收者
Posted 一个热爱编程的通信人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang入门到项目实战 | golang接口值类型接收者和指针类型接收者相关的知识,希望对你有一定的参考价值。
这个话题,本质上和方法的值类型接收者和指针类型接收者的思考方法是一样的,值接收者是一个拷贝,是一个副本,而指针接收者,传递的是指针
实例演示
定义一个Pet接口
type Pet interface
eat()
定义一个Dog结构体
type Dog struct
name string
实现Pet接口(接收者是值类型)
func (dog Dog) eat()
fmt.Printf("dog: %p\\n", &dog)
fmt.Println("dog eat...")
dog.name = "黑黑"
测试
package main
import "fmt"
type Pet interface
eat()
type Dog struct
name string
func (dog Dog) eat()
fmt.Printf("dog: %p\\n", &dog)
fmt.Println("dog eat...")
dog.name = "黑黑"
func main()
dog := Dogname: "花花"
fmt.Printf("dog: %p\\n", &dog)
dog.eat()
fmt.Printf("dog: %v\\n", dog)
运行结果
[Running] go run "d:\\SynologyDrive\\软件开发\\go\\golang入门到项目实战\\goproject\\360duote.com\\pro01\\tempCodeRunnerFile.go"
dog: 0xc000050230
dog: 0xc000050240
dog eat...
dog: 花花
从运行结果,我们看出dog的地址变了,说明是复制了一份,dog的name没有变说明外面的dog变量没有被改变。
将Pet接口改为指针接收者
package main
import "fmt"
type Pet interface
eat()
type Dog struct
name string
func (dog *Dog) eat()
fmt.Printf("dog: %p\\n", dog)
fmt.Println("dog eat...")
dog.name = "黑黑"
func main()
dog := &Dogname: "花花"
fmt.Printf("dog: %p\\n", dog)
dog.eat()
fmt.Printf("dog: %v\\n", dog)
运行结果
[Running] go run "d:\\SynologyDrive\\软件开发\\go\\golang入门到项目实战\\goproject\\360duote.com\\pro01\\test.go"
dog: 0xc000050230
dog: 0xc000050230
dog eat...
dog: &黑黑
以上是关于Golang入门到项目实战 | golang接口值类型接收者和指针类型接收者的主要内容,如果未能解决你的问题,请参考以下文章