書き方
## 配列
-
list := [3]string{"a","b","c"}
配列 := [長さの数字]型{要素} -
list := […]string{"a","b","c"}
要素の数を自動カウント
##スライス -
slice := []string{"a","b","c"}
スライス := [長さは指定しないので何も書かない]型{要素} -
slice := list[0:5]
スライス := 配列[n番目:m-1番目]
※部分列の取り方→配列[start:end]or[start:]or[:end]or[:] -
slice := make([]int,5,5)
make([ ]型,長さ,容量)
性質
スライスの長さlen(slice)と容量cap(slice)
- 長さ=要素の数
- 容量=スライスの最初の要素から数えて、元となる配列の要素
※配列をスライスしても元の要素の情報を参照型で保っている
インデックス(順番)
- 配列もスライスもインデックスは0から数える
例)list := [3]string{"0番目","1番目","2番目"}
要素の追加
- 配列は宣言時に要素の数が固定
- スライスは組み込み関数append()を使う
例) newSlice = append(slice, 追加要素)
→新しいスライスに元のスライス+最後に要素が追加される - appendが容量を超える場合、別途、容量を2倍した新しい配列をコピーします。コピーは処理コストが大きいのでmakeを使うのがおすすめ
要素の変更、代入
- スライスの要素を指定することでそこだけを変更できる
package main
import (
"fmt"
"io/ioutil"
"log"
"flag"
)
func main() {
slice := [] int{1,2,3,4}
slice[0] = 9
fmt.Println(slice)→[9,2,3,4]
- スライスの型が一致している場合、スライスを代入することができる
(元の配列の情報も引き継がれる)
##ゼロ値
- スライスのゼロ値はnilでlen=0,cap=0