Collections
array と slice: 配列はコピーされsliceは要素を共有する
配列の引数は値として渡り、sliceの要素変更は呼び出し元へ反映されます。
Sourcearray_slice.go
Go 1.22
package values
func ChangeArray(values [2]string) [2]string {
values[0] = "changed"
return values
}
func ChangeSlice(values []string) {
values[0] = "changed"
}Testarray_slice_test.go
Go 1.22
package values
import "testing"
func Test配列は値としてコピーされsliceは要素を共有する(t *testing.T) {
array := [2]string{"original", "second"}
slice := []string{"original", "second"}
changedArray := ChangeArray(array)
ChangeSlice(slice)
if array[0] != "original" || changedArray[0] != "changed" || slice[0] != "changed" {
t.Fatalf("array=%v changedArray=%v slice=%v", array, changedArray, slice)
}
}01Assertion
このテストで確認できること
- 配列を変更して返しても元の配列は変わらない
- sliceの要素変更は呼び出し元へ反映される
arrayとsliceは見た目が似ていますが値共有の契約が違います。
OBSERVED RESULT
array → [original second]
slice → [changed second]