Установить значение переменной типа пустой интерфейс{} внутри функции

#go

#Вперед

Вопрос:

Вот код, который я изо всех сил пытаюсь заставить его работать. Я хочу установить user значение внутри функции getUser, которое принимает interface{} аргумент типа.

Пример кода:https://play.golang.org/p/Zlhe9VEQhnD

 package main

import (
    "fmt"
)

type User struct {
    name string
}

func getUser(result interface{}) {
    result = User{name: "some name"}
    fmt.Println(result)
}

func main() {
    user := User{}
    getUser(amp;user)
    fmt.Println(user)   
}

  

Это дает этот результат:

 {some name}
{}
  

Я хочу, чтобы изменения, внесенные в функцию, были отражены в main

TIA

Комментарии:

1. Вы должны ввести assert для целевого типа, а затем использовать косвенный указатель. u, ok := result.(*User) Тогда if ok { вы можете сделать *u = User{name: "some name"} .

Ответ №1:

Аргумент интерфейса содержит указатель на пользовательскую структуру. Вы должны добраться до этого указателя с помощью утверждения типа и скопировать новую структуру пользователя в целевую структуру:

 func getUser(result interface{}) {
    *result.(*User) = User{name: "some name"}
    fmt.Println(result)
}