構造体のフィールドの値を変更する必要があるなら、構造体のポインタで渡す。
そうでないなら、値で渡す。
値で渡した場合は、構造体のコピーが作られるため、元のデータが変更されない。
なので、基本的にポインタで渡しておき、フィールドのデータを書き換える必要がない場合や明確に元のデータを書き換えたくない場合には値で渡す。
package main
import "fmt"
type mutableUser struct {
ID int
Name string
Age int
}
func (u *mutableUser) SetAge(age int) {
u.Age = age
}
type immutableUser struct {
ID int
Name string
Age int
}
func (u immutableUser) SetAge(age int) {
u.Age = age
}
func main() {
// Mutable
mutableUser := mutableUser{ID: 1, Name: "Test", Age: 25}
mutableUser.SetAge(10)
fmt.Printf("Mutable user age: %d\n", mutableUser.Age)
// 10
// Immutable
immutableUser := immutableUser{ID: 1, Name: "Test", Age: 25}
immutableUser.SetAge(10)
fmt.Printf("Immutable user age: %d\n", immutableUser.Age)
// 25
}