#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)
}