golang如何理解值类型和引用类型_golang值类型与引用类型区别详解
pGo所有传参均为值传递但“值”取决于类型底层基础类型传数据副本slice/map/chan传含指针的header副本修改元素会影响原变量需改变量本身如重置slice header时才必须传* T。/pGo 里所有传参都是值传递但“值”是什么得看类型底层Go 没有引用传递只有值传递。区别在于传的是「数据本身」还是「指向数据的结构体副本」。比如 int 传的是整个整数拷贝而 []int 传的是一个含 ptr、len、cap 的 header 结构体——这个结构体是拷贝的但它里面的 ptr 仍指向原底层数组。修改 slice 元素如 s[0] 100会影响原 slice因为 ptr 没变对 slice 做 append 后若触发扩容新 slice 的 ptr 可能指向新地址原 slice 完全不受影响map 和 chan 类似传参拷贝的是 header内部含指针增删改 key / 发送接收都会作用到同一底层结构怎么快速判断一个类型传参后改不改原变量不用背分类表动手试两行代码最准写个函数参数用该类型函数内修改它不是改指针是改内容比如 arr[0] 99 或 m[k] 1调用后立刻检查原变量是否变化 —— 变了就是“表现像引用”没变就是纯值拷贝注意避开陷阱string 看似像引用不可变但其实是只读的值类型[3]int 是值类型[]int 才是引用行为什么时候必须传 *T 而不是 T当你需要在函数内修改「变量本身的值」而不仅是它指向的内容时就必须传指针。想让函数改变调用方的 slice header比如让它指向新数组必须传 *[]int想让函数把 map 置为 nil 或换一个新的 make(map[string]int)也得传 *map[string]int结构体很大比如含大数组字段时传 *T 避免整块内存拷贝这是性能刚需不是语义选择自定义 struct 是值类型还是引用类型取决于它有没有指针字段或嵌套引用类型字段。Go 不看名字看内存布局。 Vozo Vozo是一款强大的AI视频编辑工具可以帮助用户轻松重写、配音和编辑视频。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2501395.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!