導入
同じ型の値を順番に並べて持つのが スライス(slice) です。Go で「リスト」といえばほぼこれ。要素を後から追加できます。
説明
package main
import "fmt"
func main() {
nums := []int{10, 20, 30}
fmt.Println(nums) // [10 20 30]
fmt.Println(nums[0]) // 10(先頭は 0 番目)
fmt.Println(len(nums)) // 3(要素数)
nums = append(nums, 40) // 末尾に追加
fmt.Println(nums) // [10 20 30 40]
}
[]int{...}…intのスライスを作るリテラル。[]の中は空にします(数を書くと固定長の「配列」になります)。nums[0]… 添字でのアクセス。先頭は0。len(nums)… 要素数を返す組み込み関数。append(nums, 40)… 末尾に要素を足した新しいスライスを返す関数。戻り値をnumsに代入し直すのが定石です。
存在しない添字(nums[10] など)にアクセスすると、実行時に panic(パニック、異常終了)になります。len で範囲を確かめてから使いましょう。
やってみよう
nums = append(nums, 40) の nums = を忘れて append(nums, 40) だけにすると、追加結果が捨てられて nums は変わりません。append は「戻り値を受け取る」ところがポイントです。