Go Lang的分片append()
可能會分配一個新的後備陣列爲新項目騰出空間。因此,呼叫z = append(x,y)
後,如果z
的最前的元素被修改,x
基本上是未指定 - 這可能會或可能不具有相同的背襯陣列z
,和z
可能變異其背襯陣列z[0] = foo
,其因此可能或可能不會修改x
的支持陣列。爲什麼Go slice'append()`沒有引用?
那麼,爲什麼讓這個醜陋的表面呢?相反,使它成爲一個程序錯誤,將追加結果賦給除第一個參數以外的任何東西,爲什麼不用append
取而代之*[]T
,所以不需要重新分配,並且沒有未定義的變量留下。
這不會解決所有情況,因爲a = x; append(&x,y)
仍然會使a
未定義,但部分改進似乎比沒有更好。
修改了我的介紹,以澄清修改'z'使'x'具有未指定的內容。 – misterbee