本当にただのメモ

なるべく Qiita に投稿しよう

スライスを破壊的に変更

スライスは配列の参照なので、ポインタレシーバじゃなくても書き換えられるのがポイント。

range の第二引数は要素の コピー だけど、 slice[i] だと 参照 になる ... というのすぐ忘れる(覚えられない)。

package main

import "fmt"

type People []Person
type Person struct{ name string }

func main() {
    people := People{{}, {}, {}}
    people.setNames()
    fmt.Println(people) //=> [{John} {John} {John}]
}

func (people People) setNames() {
    for i := range people {
        people[i].name = "John"
    }
}

See Also