Go : Array vs Slice


ArrayとSliceは一見同じタイプだと勘違いします.
私.
「Arrayが長さとして定義されている場合はArray、長さが指定されていない場合はSlice、どちらも並んでいます.」
私はただそう思っています.
しかし、Goはそれを異なるタイプに分けた.
次の例です.
func main(){
    a := [3]int{1,2,3}
    var b []int
    b = a
}
上のコードを見て
aは長さ3のarray intタイプ、bは動的に伸ばすことができるslice intタイプである.
同じ配列だと思いますが、sliceはいつでも成長できるので、aをbに入れることができます.
ただし、この2つのタイプは異なるタイプなので、コンパイルエラーが親切に発生します.

これを理解してarrayとsliceのいくつかの特徴を探し始めました.

ArrayとSlice特性


Arrayは、アレイ内のすべての値を持つタイプです。


この特徴によりarrayは同じ資料タイプでも長さが異なる場合は異なるタイプである.
a := [3]int{1,2,3}
b := [4]int{1,2,3,4}
aとbは長さが異なるため、異なるタイプである.
aは、3の長さを有するint型タイプである.
bは長さ4のint型である.
そう説明しよう

Sliceは参照値を格納するタイプです。


これは内部では配列によって値を管理し、slice自体には配列内の最初の要素を指すポインタがあります.
a := []int{1,2,3}
var b = a
b[2] = 10
fmt.Println(a, b)
しゅつりょく
[1 2 10][1 2 10]
上記の結果から、sliceタイプにはアドレス値があるため、別の変数に代入すると、同じソースを指していると判断できます.
コピーするには、copy()という関数を使用します.
参考資料:置換go[1]配列とslice