У меня есть функцияЛитой указатель структуры для интерфейса указатель в Golang
func doStuff(inout *interface{}) {
...
}
цель этой функции, чтобы иметь возможность обработать указатель любого типа в качестве входных данных. Но когда я хочу называть его указателем на структуру, у меня есть ошибка.
type MyStruct struct {
f1 int
}
doStuff
При вызове
ms := MyStruct{1}
doStuff(&ms)
У меня есть
test.go:38: cannot use &ms (type *MyStruct) as type **interface {} in argument to doStuff
Как я могу бросить &ms
быть совместимы с *interface{}
?
Отлично, вы делаете мой день! – taharqa
Как интерфейсные переменные работают внутри, не имеет отношения к вопросу. Семантически переменная интерфейса содержит копию значения, от которой она была назначена, как и любой другой тип в Go. Под ним реализован неизменный указатель на данные, но это не видно программисту. – newacct
Вы должны объяснить, что передача указателя на интерфейс напрямую работает, потому что если 'MyStruct' соответствует протоколу, то' * MyStruct' также соответствует протоколу (так как набор методов типа входит в набор методов его указателя). В этом случае интерфейс представляет собой пустой интерфейс, поэтому он все равно принимает все типы, но все же. – newacct