Как создать универсальную функцию, которая преобразует строку json в структуру в golang? - PullRequest
0 голосов
/ 04 июня 2019

Прежде всего, у меня есть следующая структура:

type User struct {
    Username string
    Password string
    FullName string
    Mail string
}

И я попытался создать следующую функцию:

func FromJson(emptyJsonAble interface{},jsonString string) interface{} {
    err := json.Unmarshal([]byte(jsonString), &emptyJsonAble)
    if err != nil {
        panic(err)
    }
    return emptyJsonAble
}

Я вызвал функцию следующим образом:

user := FromJson(User{}, str)

Но функция возвращает следующую карту вместо структуры пользователя:

map [FullName: a Mail: пароль: b Имя пользователя: a]

Как вернуть саму структуру (без преобразования возвращаемого объекта каждый раз) ?

Другими словами, как заставить функцию считать emptyJsonAble типом User, когда дают. Я пытался работать с отражением. Тип, но я застрял

1 Ответ

1 голос
/ 04 июня 2019

Когда вы передаете структуру User через нее, вы фактически передаете ей копию значения, в вашем сценарии вы хотите передать указатель на тип. Тогда, поскольку у вас уже есть указатель, вам не нужно передавать по ссылке внутри вашей функции:

user := FromJson(&User{}, str)

err := json.Unmarshal([]byte(jsonString), emptyJsonAble)

https://play.golang.org/p/uXMcFCl138y

UPDATE:

в равной степени, поскольку теперь вы передаете по ссылке, вам не нужно возвращать копию не маршализованной структуры данных:

https://play.golang.org/p/GJKqVJLbRCZ

В обоих случаях мы видим, что результаты одинаковы, поэтому возвращать данные вам не нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...