Новое, чтобы идти. Обнаружена эта ошибка и не повезло найти причину или обоснование для нее:
Если я создам структуру, я могу, очевидно, назначить и повторно назначить значения без проблем:
type Person struct {
name string
age int
}
func main() {
x := Person{"Andy Capp", 98}
x.age = 99
fmt.Printf("age: %d\n", x.age)
}
но если struct является одним значением на карте:
type Person struct {
name string
age int
}
type People map[string]Person
func main() {
p := make(People)
p["HM"] = Person{"Hank McNamara", 39}
p["HM"].age = p["HM"].age + 1
fmt.Printf("age: %d\n", p["HM"].age)
}
Я получаю cannot assign to p["HM"].age
. Что это, никакой другой информации. http://play.golang.org/p/VRlSItd4eP
Я нашел способ обойти это: создание функции incrementAge
fun на Person, которая может быть вызвана, и результат, назначенный ключу карты, например p["HM"] = p["HM"].incrementAge()
.
Но, на мой вопрос, в чем причина этой ошибки "не могу назначить", и почему я не должен позволять напрямую присваивать значение struct?