Как я могу инициализировать поле карты структуры с помощью отражения - PullRequest
1 голос
/ 13 февраля 2020

Как я могу инициализировать поле карты структуры с помощью отражения?

Пример кода, который паникует, и я хочу, чтобы он работал ( Детская площадка ):

package main

import (
    "fmt"
    "reflect"
)

type User struct {
    Names map[string]string
}

func main() {
    var u interface{} = User{}
    names := make(map[string]string)
    names["test"] = "test"

    v := reflect.ValueOf(u)
    n := reflect.ValueOf(names)

    field := v.FieldByName("Names")
    field.Set(n)

    fmt.Println(v.Interface())
    fmt.Println(u)
}
panic: reflect: reflect.flag.mustBeAssignable using unaddressable value

goroutine 1 [running]:
reflect.flag.mustBeAssignableSlow(0x15, 0x0)
    /usr/local/go/src/reflect/value.go:247 +0x180
reflect.flag.mustBeAssignable(...)
    /usr/local/go/src/reflect/value.go:234
reflect.Value.Set(0x101ec0, 0x0, 0x15, 0x101ec0, 0x43e280, 0x15)
    /usr/local/go/src/reflect/value.go:1531 +0x40
main.main()
    /tmp/sandbox776916734/prog.go:21 +0x200
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...