概要 Sliceの構造を始め、関数で呼び出した場合の挙動やappendなどsliceを操作した場合どうなるかをまとめました。 環境 golang v1.9.0 Sliceの構造 Sliceは以下のような3つの要素でなりたっています。 配列へのポインタ length capacity 図示すると以下です。 ref: Go Slices: usage and internals - go.dev 関数の引数として渡した時 Goの関数の引数は基本的に値渡しです。これはsliceも同じです。なので渡した変数のポインタは異なります。 func main() { s := []int{1, 2, 3} fmt.Printf("%p\n", &s) // 0x1040a0b0 someFunc(s) } func someFunc(s []int) { fmt.Printf("%p\n", &s) //
![GoのSliceを関数の引数に渡した時の挙動 - Carpe Diem](https://cdn-ak-scissors.b.st-hatena.com/image/square/1587eee1227a0192b64290c849d4f11409be8f5a/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fq%2Fquoll00%2F20170926%2F20170926151254.png)