golang值传递和引用传递
2021/6/12 18:30:04
本文主要是介绍golang值传递和引用传递,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、值传递和引用传递区别
package main import ( "fmt" ) func main() { // map m := make(map[int]string) m[0] = "a" m[1] = "b" changeMap(m) fmt.Printf("map:%+v", m) //输出 map:map[0:aaa 1:b] fmt.Println() //array var a = [2]string{"a", "b"} changeArray(a) fmt.Printf("array:%+v", a) //输出array:[a b] fmt.Println() //slice var s = []string{"a", "b"} changeSlice(s) fmt.Printf("slice:%+v", s) //输出slice:[aaa b] } func changeMap(m map[int]string) { m[0] = "aaa" } func changeArray(a [2]string) { a[0] = "aaa" } func changeSlice(s []string) { s[0] = "aaa" }
二、结构体传递指针或者值
1、值传递
package main type T struct{ Value int } func main(){ myT := T{Value:666} change(myT) println(myT.Value) } func change(t T){ t.Value = 999
程序的输出是 666 ,因为这种方法传递的是值一个副本,在change() 函数中,你实际上修改的是副本的值
2、指针传递
package main type T struct{ Value int } func main(){ myT := T{Value:666} change(&myT) println(myT.Value) } func change(t *T){ t.Value = 999 }
这段程序使用了&取地址操作符来获取结构体的地址,而change()函数期望一个T结构体的地址类型 *T,这里*T的意思是指向类型T值得指针;
程序运行输出 999
这篇关于golang值传递和引用传递的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21MongoDB资料:新手入门与初级应用指南
- 2024-09-20MongoDB教程:初学者必备指南
- 2024-09-05MongoDB入门:快速掌握NoSQL数据库基础
- 2024-08-28go 项目中怎么打印调试-icode9专业技术文章分享
- 2024-08-21swoole未来的发展前景与golang对比哪个更好-icode9专业技术文章分享
- 2024-08-16goland 已经下了中文插件了, 怎么设置成中文-icode9专业技术文章分享
- 2024-07-26使用 SendGrid 的 Go 客户端库能同时给多个邮箱发吗-icode9专业技术文章分享
- 2024-07-26使用 SendGrid 的 Go 客户端库时怎么设置header 和 标签tag 呢-icode9专业技术文章分享
- 2024-07-26SendGrid 对邮件的类别(Categories)和标签的数量有限制吗?-icode9专业技术文章分享
- 2024-07-17课程推荐《高性能GO企业级APM监控系统实战》