Go语言学习记录之一(返回指针与返回值的区别)
2015-10-09 00:01
781 查看
先来一个返回指针的测试,结果跟想象一样
再试试直接返回值,这下的输出和想象中不一样了
为什么呢,再试试
go 语言中map,slice都是指针类型,以值的形式返回struct的时候只是把map对应的指针拷贝了
type A map[int]string type B struct { A c int } func main() { b := B{make(A), 10} NewB := func() *B { return &b } c := NewB() c.c = 100 c.A[1] = "3" fmt.Println(b, c) } /* output {map[1:3] 100} &{map[1:3] 100} */
再试试直接返回值,这下的输出和想象中不一样了
type A map[int]string type B struct { A c int } func main() { a := B{make(A), 10} b := B{make(A), 10} NewB := func() B { return b } c := NewB() c.c = 100 c.A[1] = "3" // c[1]="3" invalid operation: c[1] (type B does not support indexing) fmt.Println(a, b, c) } /* output {map[] 10} {map[1:3] 10} {map[1:3] 100} */
为什么呢,再试试
type A map[int]string type B struct { A c int } func main() { a := make(A) NewA := func() A { return a } b := NewA() b[1] = "10" fmt.Println(a, b) } /* output map[1:10] map[1:10] */ 这样就编译不过了 func main() { a := make(A) NewA := func() *A { return &a } b := NewA() b[1] = "10" //invalid operation: b[1] (type *A does not support indexing) fmt.Println(a, b) }
go 语言中map,slice都是指针类型,以值的形式返回struct的时候只是把map对应的指针拷贝了
相关文章推荐
- Django 学习笔记---环境配置
- #1049 : 后序遍历分治算法
- 组织Go的源码
- 【PAT】1096. Consecutive Factors (20)
- Django中关于url的用法
- django 分拆url文件
- django 模板找不到TemplateDoesNotExist报错!
- go语法
- Go语言学习笔记、Go和C++区别
- Algorithms—89.Gray Code
- ZOJ 3197 Google Book
- 【期望dp】LightOJ 1030 Discovering Gold
- django 学习资料
- mongoose
- Algorithms—229.Majority Element II
- LSGO软件技术团队2015~2016学年第三周(0914~0920)总结
- Algorithms—287.Find the Duplicate Number
- django模型修改后更新报错表不存在的的解决办法
- Go语言学习笔记
- Algorithms—290.Word Pattern