【发布时间】:2014-01-10 02:40:47
【问题描述】:
Go Lang 的切片 append() 可能会分配一个新的后备数组来为新项目腾出空间。因此,在调用z = append(x,y) 之后,如果z 的最前面的元素被修改,x 本质上是未指定的——它可能具有或不具有与z 相同的后备数组,并且z 可能会发生变异它的后备数组带有z[0] = foo,因此可能会也可能不会修改x 的后备数组。
那么,为什么要让这种丑陋浮出水面呢?而是将 append 的结果分配给除第一个参数之外的任何内容,而是将其作为程序错误,为什么不让 append 取而代之的是 *[]T,这样就不需要重新分配,也没有未定义的变量悬空。
这不会解决所有情况,因为a = x; append(&x,y) 仍会使a 未定义,但部分改进似乎总比没有好。
【问题讨论】:
标签: go