golanggolangc++pythonjavagolangmapslicepythonjavagolanggolanggolanggcc语言golangc++c看似为引用的一些现象
map、slice
sliceslicec++vectorsliceslicesliceslicesliceslicegolangappenddeleteslice例如
func f(a []int)
{
	a = append(a,1)
	a[len(a)-1]=2
}
fmapslicechannalcapafslicec++cc++cgolangs1 := make([]int, 0, 10)
s1 = append(s1, 1)
s1 = append(s1, 2)
s2 := s1
s2 = append(s2, 3)
s1 = append(s1, 4)
for _, v := range s1 {
	print(v, " ")
}
print("\n")
for _, v := range s2 {
	print(v, " ")
}
print("\n")
golang1 2 4                                                     
1 2 4   
map的原理差不多,就不赘述了。
a = append(a,1)slicemapappendslicemapslicemapgetslicechannel
golangchannelchannel<-->channelmutex、sync.map
syncmutexmutexsync.map闭包
闭包中的捕获变量,从编辑器的角度上和原变量是同一个符号。从定义上来看是不能说是引用的。
有关于指针
golangmodern clang*指针指针golang对于以下类型A。
type A int
func (receiver *A) ptr() {
}
func (receiver A) noptr() {
}
以下的调用都是合法的。
a := A(0)
a.ptr()
a.noptr()
b := &a
b.ptr()
b.noptr()
abgolangpanicerrgolangc笔者建议:
protobufgolang此外。在设计上需要注意指针尽量封装在模块内部,模块则以组合加载的形式封装在大模块内部,不要过度使用裸指针。
