golang
golangc++pythonjavagolangmapslicepythonjavagolanggolanggolanggcc语言
golangc++c
看似为引用的一些现象
map、slice
sliceslicec++vectorsliceslicesliceslicesliceslicegolangappenddelete
slice
例如
func f(a []int)
{
a = append(a,1)
a[len(a)-1]=2
}
fmapslicechannal
capafslicec++cc++cgolang
s1 := 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")
golang
1 2 4
1 2 4
map的原理差不多,就不赘述了。
a = append(a,1)slicemapappendslicemapslicemap
getslice
channel
golangchannelchannel<-->channel
mutex、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()
abgolangpanicerr
golangc
笔者建议:
protobufgolang
此外。在设计上需要注意指针尽量封装在模块内部,模块则以组合加载的形式封装在大模块内部,不要过度使用裸指针。