導入
同じ型の値を順番に並べて持つのが スライス(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 は「戻り値を受け取る」ところがポイントです。
演習
append をもう1回使って 50 も追加し、最後の表示が [10 20 30 40 50] になるようにしてください。
ヒント1を見る
append は「新しいスライスを返す」ので、結果を nums = で受け取り直す必要があります。
ヒント2を見る
nums = append(nums, 40) の下に nums = append(nums, 50) を足します。nums = を書き忘れると追加結果が捨てられます。