ディレクトリ
配列
配列は、同じ型の要素のコレクションです。すべての要素はすべて同じ型でなければなりません。例えば、整数の配列5,8,9,79,76形成されています。ゴー言語は、例えば、要素の異なるタイプの混合文字列と整数を含む配列を可能にしました。(もちろん、インターフェイス{}は配列型である場合、任意の型を含むことができます)
まず、配列の定義
1、配列を宣言
構文:
var 数组名 [元素个数]元素类型 // 数组大小固定,不能多
デフォルト値および関連するストレージアレイのタイプの配列。
var lis [3] int
fmt.Println(lis) // [0 0 0] int的默认值是0
図2に示すように、初期設定値
構文:
var 数组名 [元素个数]元素类型 = [元素个数]元素类型{元素1,元素2,元素3}
定义每个元素
//var lis [3]int = [3]int{1, 2, 3}
// lis := [3]int{1, 2, 3}
var lis = [3]int{1, 2, 3}
fmt.Println(lis) // [1 2 3]
fmt.Printf("%T",lis) // [3]int
図3に示すように、指定された位置設定部
ただ、要素の位置を設定します。
構文:
[元素个数]元素类型{索引:值} ,其它都是默认值
var a [30]int=[30]int{28:1,23:999}
図4に示すように、初期化が指定されていない長さ(こちら)
[]
指定された長さの範囲内ではなく、[...]
長さが、このような文の配列は、最大長を初期化されます。代わりに、可変長配列の。
了解 (这不是可变长)
a :=[...]int{28:1,23:999} //长度为29
a :=[...]int{2,3,4} //长度为3
// a :=[3]int{2,3,4} //长度为3
第二に、アレイの使用
インデックス値
var lis = [3]int{2, 4, 6}
fmt.Println(lis[0],lis[2])
2 6
値を直接変更
var lis = [3]int{2, 4, 6}
fmt.Println(lis)
lis[1] = 666
fmt.Println(lis)
[2 4 6]
[2 666 6]
第三に、配列の型
[元素个数]元素类型 // 合在一起才是一个数组的类型,数组的大小也是类型的一部分
配列は値型ではなく、基準タイプ(アドレス)です。
言語関数のパラメータを渡す、すべてのコピーの配信を行きます。それは値型または参照型であるかどうか。コピーは、この関数に渡します。
値が型の変数である場合には変更はコピー変数には影響を与えませんした後、関数に渡します。それは、異なる変数されているように。
しかし、変更は、このアドレスの他の参照変数に影響を与えるした後、それが関数に渡された参照型の変数がある場合。このアドレスの値は直接変更ため。
第四に、配列の長さ
組み込み関数を用いてlen()
配列の長さを取得します。
var a =[30]int{2,4,6}
fmt.Println(len(a)) //3
第五に、配列の反復
1、初期の繰り返し
var lis = [3]int{2,4,6}
for i:=0;i<len(lis);i++{
fmt.Println(lis[i])
}
2
4
6
図2に示すように、反復範囲を使用して
//for i:=range a{} //只用一个值来接收,就是索引
//for i,v:=range a{} //如果两个值来接收,就是索引(i)和值(v)
//for _,v:=range a{} //只接受值
var lis = [3]int{2,4,6}
for i,v:=range lis{
fmt.Println(i,v)
}
0 2
1 4
2 6
第六に、多次元配列
var a [3][3]int
fmt.Println(a)
[[0 0 0] [0 0 0] [0 0 0]]
----------------------------------
var a [3][3]int=[3][3]int{{1,2,3},{4,5,6},{7,8}}
a[0][1]=999
fmt.Println(a)
[[1 999 3] [4 5 6] [7 8 0]]
----------------------------------
var a [3][3][3]int
fmt.Println(a)
[
[[0 0 0] [0 0 0] [0 0 0]]
[[0 0 0] [0 0 0] [0 0 0]]
[[0 0 0] [0 0 0] [0 0 0]]
]