2
golangで遊んでいて、userGroup構造体内でユーザーの電子メールを変更できない理由を理解できません。構造体の値を変更する
package main
import "fmt"
type user struct {
name, email string
}
func (u *user) changeEmail(newEmail string) {
u.email = newEmail
}
type userGroup struct {
users map[int]user
}
func (ug *userGroup) mapOverUsers(fn func(u *user)) {
usersLen := len(ug.users)
for i := 0; i < usersLen; i++ {
usr := ug.users[i]
fn(&usr)
}
}
func main() {
ug := userGroup{
map[int]user{0: {"0", "ZZZ"}, 1: {"1", "ZZZ"}, 2: {"2", "ZZZ"}}}
fmt.Println(ug)
// should be same as (&ug).mapOverUsers
ug.mapOverUsers(func(u *user) {
u.changeEmail("XXX")
fmt.Println(u)
})
fmt.Println(ug)
}
私がチェックし、私はug
(userGroupの)とu
(ユーザー)のためにメモリ内の同じアドレスを参照すると信じています。たぶん、それは正しいアプローチではない、ちょうど本を読んで、私が行くように単純なことをしようとしている。ありがとうございました。