Go : Array vs Slice
ArrayとSliceは一見同じタイプだと勘違いします.
私.
「Arrayが長さとして定義されている場合はArray、長さが指定されていない場合はSlice、どちらも並んでいます.」
私はただそう思っています.
しかし、Goはそれを異なるタイプに分けた.
次の例です.
aは長さ3のarray intタイプ、bは動的に伸ばすことができるslice intタイプである.
同じ配列だと思いますが、sliceはいつでも成長できるので、aをbに入れることができます.
ただし、この2つのタイプは異なるタイプなので、コンパイルエラーが親切に発生します.
これを理解してarrayとsliceのいくつかの特徴を探し始めました.
この特徴によりarrayは同じ資料タイプでも長さが異なる場合は異なるタイプである.
aは、3の長さを有するint型タイプである.
bは長さ4のint型である.
そう説明しよう
これは内部では配列によって値を管理し、slice自体には配列内の最初の要素を指すポインタがあります.
[1 2 10][1 2 10]
上記の結果から、sliceタイプにはアドレス値があるため、別の変数に代入すると、同じソースを指していると判断できます.
コピーするには、copy()という関数を使用します.
参考資料:置換go[1]配列と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
Reference
この問題について(Go : Array vs Slice), 我々は、より多くの情報をここで見つけました https://velog.io/@obm4489/Go-Array-vs-Sliceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol