go语言方法Value Receiver, Pointer Receiver
来源:互联网 发布:qq三国79js单刷孟获 编辑:程序博客网 时间:2024/06/08 12:59
- 情况1 Pointer Receiver
type field struct {
name string
}
func (p *field) print() {
fmt.Printf("%p\n", p)
fmt.Println(p.name)
}
func main() {
data := []field{{"one"}, {"two"}, {"three"}}
//data为对象数组,v为对象类型,print方法参数为指针类型,v调用print方法需要传递其本身的地址
//每次迭代,v本身地址不变,但每次迭代后其内容不同
//所以最终的打印内容是v最后一次迭代的内容
for _, v := range data {
fmt.Printf("%p\n", &v)
go v.print()
}
time.Sleep(3 * time.Second)
}
每次打印的结果都为three
- 情况2 Pointer Receiver
type field struct {
name string
}
func (p *field) print() {
fmt.Printf("%p\n", p)
fmt.Println(p.name)
}
func main() {
data := []*field{{"one"}, {"two"}, {"three"}}
//data为对象指针数组,v为对象指针类型,print方法参数为指针类型,v调用print方法直接传递v的值即可
//每次迭代,v本身地址不变,但每次迭代后其值(内容)不同
//所以最终的打印内容是v每一次迭代的内容,各不相同
for _, v := range data {
fmt.Printf("%p\n", v)
go v.print()
}
time.Sleep(3 * time.Second)
}
分别打印one,two,three
- 情况3 Value Receiver
type field struct {
name string
}
func (p field) print() {
fmt.Println(p.name)
}
func main() {
data := []field{{"one"}, {"two"}, {"three"}}
//data为对象数组,v为对象类型,print方法参数为对象类型,v调用print方法需要传递其本身对象的copy
//每次迭代,v本身地址不变,但每次迭代后其内容不同,调用print时copy的内容也不同
//所以最终的打印内容是v每一次迭代的内容
for _, v := range data {
fmt.Printf("%p\n", &v)
go v.print()
}
time.Sleep(3 * time.Second)
}
分别打印one,two,three
- 情况4 Value Receiver
type field struct {
name string
}
func (p field) print() {
fmt.Println(p.name)
}
func main() {
data := []*field{{"one"}, {"two"}, {"three"}}
//data为对象数组,v为对象指针类型,print方法参数为对象类型,v调用print方法需要传递其指向对象的copy
//每次迭代,v本身地址不变,但每次迭代后其值(内容)不同,指向的结果也不相同,调用print时copy的内容也不同
//所以最终的打印内容是v每一次迭代的内容
for _, v := range data {
fmt.Printf("%p\n", v)
go v.print()
}
time.Sleep(3 * time.Second)
}
分别打印one,two,three
0 0
- go语言方法Value Receiver, Pointer Receiver
- go语言中的value receiver和pointer receiver
- go语言方法Value Receiver, Pointer Receiver各种不同情况的实验笔记
- Go 方法的receiver和*receiver的区别
- go 类型方法 receiver的理解
- <receiver>
- Receiver
- lumaqq receiver
- Trap receiver
- Receiver 实例
- broadcast receiver
- Broadcast Receiver
- Broadcast Receiver
- Broadcast Receiver
- Message Receiver
- Boardcast receiver
- Broadcast Receiver
- Broadcast Receiver
- Android framework系统默认设置修改
- 将mysql中某个字段的值导出到本地文件的方法
- Python3 基础:python简介基本知识
- Android :Some file crunching failed, see logs for details解决办法
- 机器学习的实现框架-笔记
- go语言方法Value Receiver, Pointer Receiver
- 自动化读取文件真的好吗?
- 函数返回类的引用
- python操作mysql
- centos环境配置信息
- 基于二叉排序树的基本操作
- java中文汉字按英文字母表排序
- DTW的基本原理及其C语言实现
- STL vector的内部实现原理及基本用法