Go语言自学系列golang方法接收者类型
视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客
结构体实例,有值类型和指针类型,那么方法的接收者是结构体,那么也有值类型和指针类型。区别就是接收者是否复制结构体副本。值类型复制,指针类型不复制。值类型结构体和指针类型结构体
实例package main import "fmt" type Person struct { name string } func main() { p1 := Person{name: "tom"} fmt.Printf("p1: %T ", p1) p2 := &Person{name: "tom"} fmt.Printf("p2: %T ", p2) }
运行结果[Running] go run "d:SynologyDrive软件开发gogolang入门到项目实战goproject360duote.compro01 est.go" p1: main.Person p2: *main.Person
从运行结果,我们可以看出p1是值类型,p2是指针类型。
下面看一个传参结构体的例子package main import "fmt" type Person struct { name string } func showPerson(per Person) { fmt.Printf("per: %p ", &per) per.name = "kite" fmt.Printf("per: %v ", per) } func showPerson2(per *Person) { fmt.Printf("per: %p ", per) per.name = "kite" fmt.Printf("per: %v ", per) } func main() { p1 := Person{name: "tom"} fmt.Printf("p1: %p ", &p1) showPerson(p1) fmt.Printf("p1: %v ", p1) fmt.Println("---------------------") p2 := &Person{name: "tom"} fmt.Printf("p2: %p ", p2) showPerson2(p2) fmt.Printf("p2: %v ", p2) }
运行结果[Running] go run "d:SynologyDrive软件开发gogolang入门到项目实战goproject360duote.compro01 est.go" p1: 0xc000050230 per: 0xc000050240 per: {kite} p1: {tom} --------------------- p2: 0xc000050270 per: 0xc000050270 per: &{kite} p2: &{kite}
从运行结果,我们看到p1是值传递,拷贝了副本,地址发生了改变,而p2是指针类型,地址没有改变。方法的值类型和指针类型接收者
值类型和指针类型接收者,本质上和函数传参道理相同。
实例package main import "fmt" type Person struct { name string } func (per Person) showPerson() { fmt.Printf("per: %p ", &per) per.name = "kite" fmt.Printf("per: %v ", per) } func (per *Person) showPerson2() { fmt.Printf("per: %p ", per) per.name = "kite" fmt.Printf("per: %v ", per) } func main() { p1 := Person{name: "tom"} fmt.Printf("p1: %p ", &p1) p1.showPerson() fmt.Printf("p1: %v ", p1) fmt.Println("---------------------") p2 := &Person{name: "tom"} fmt.Printf("p2: %p ", p2) p2.showPerson2() fmt.Printf("p2: %v ", p2) }
运行结果[Running] go run "d:SynologyDrive软件开发gogolang入门到项目实战goproject360duote.compro01 est.go" p1: 0xc000050230 per: 0xc000050240 per: {kite} p1: {tom} --------------------- p2: 0xc000050270 per: 0xc000050270 per: &{kite} p2: &{kite}
WiFi经常不好,该换路由器还是加个信号扩展器?如今每家几乎都有路由器,大户型还会入手WiFi信号扩展器,如果对这两者不太了解,家里WiFi不好时,就容易纠结是该换个好点的路由器还是加无线中继器扩展信号。无线路由器和无线中继器它
魅族19Pro颠覆传统,真全面屏来袭,小众旗舰也有春天纵观所有手机厂商,魅族非常特殊,与小米OV有所不同,是一家比较小众的手机厂商,其系统安全性可媲美iPhone,之前也表示过,魅族只卖最安全的手机。因为三零广告系统策略,魅族的营收并
智能手机的普及,人们渐渐失去了3种能力智能手机的出现能给人们带来便利,但同时也让人类逐渐丧失了一些应有的能力。现代人的日常作息都和智能手机脱不了关系。虽然智能手机的出现给人们带来便利,但也让人类逐渐丧失了一些应有的能力
探寻智能化战争的底层逻辑从四对基本关系入手探寻智能化战争的底层逻辑引言正如寻求世界底层逻辑的哲学,关注的是思维与存在主体与客体感性与理性的关系问题一样,我们应该从最底层思考智能化战争体系各基本要素之间的关
华为仓颉语言会是中文编程吗?或将成为鸿蒙发展的关键一环丨欧界华为仓颉语言会是中文编程吗?或将成为鸿蒙发展的关键华为仓颉语言会是中文编程吗?或将成为鸿蒙生态的关键欧界报道近日,华为可以说又为我们带来了一个惊喜目前华为正在为鸿蒙生态打造专属的编
一代神U麒麟9905G和骁龙870的性能差距有多大?文小伊评科技在20292020年这个时间段内,安卓手机市场的旗舰处理器主要以麒麟990和骁龙865为主,而随着华为被制裁,麒麟处理器受到致命打击,失去了和高通同台竞争的能力。在失去
微型新能源汽车市场竞争格局重塑进行时本报记者杨让晨张家振上海报道有国民代步车之称的微型新能源汽车市场格局正在悄然发生变化。全国乘用车市场信息联席会(以下简称乘联会)数据显示,2021年国内汽车市场上在售的微型汽车共有
文萃来源读特编者按数智化是数字智慧化与智慧数字化的合成。有三层含义一是数字智慧化,相当于云计算的算法,即在大数据中加入人的智慧,提高大数据的效用二是智慧数字化,即运用数字技术,把人的智
你还使用美国的苹果手机,电子产品吗?你还使用美国的苹果手机,电子产品吗?我目前没有再用苹果手机,这次乌克兰事件已经说明一切,我觉得用苹果也没有高人一等,最多的就是仅仅为了炫耀!如今中国制造已经不复昔日之吴下阿蒙,早已
2022年哪些前端技术会火?以Vite为代表的前端构建工具进入加速赛道ESM大势所趋,势如破竹,由于ESM的普及,而带来的打包工具的革命以及适用于ESM下一代CDN的发展,业务项目在生产环境开始使用原生的ES
Elasticsearch精确值查找当进行精确值查找时,我们会使用过滤器(filters)。过滤器很重要,因为它们执行速度非常快,不会计算相关度(直接跳过了整个评分阶段)而且很容易被缓存,请尽可能多的使用过