Golang метод с помощью Pointer Receiver
] При попытке изменить значение экземпляра с помощью метода крайне важно понять концепцию указателя. приемники. В этом примере метод Setsomefield не работает, как ожидалось, потому что его приемник не имеет типа указателя.
, чтобы исправить это, мы изменяем метод SetSomefield, чтобы принять приемник указателя следующим образом:
func (i *Implementation) SetSomeField(newValue string) { ... }
, однако, это изменение вводит новую проблему: struct больше не реализует интерфейс, потому что метод GetSomefield по -прежнему имеет приемник значения.
решение заключается в использовании указателя на структуру, когда Реализация интерфейса. Таким образом, мы включаем метод изменять фактический экземпляр без создания копии. Вот модифицированный код:
type IFace interface { SetSomeField(newValue string) GetSomeField() string } type Implementation struct { someField string } func (i *Implementation) GetSomeField() string { return i.someField } func (i *Implementation) SetSomeField(newValue string) { i.someField = newValue } func Create() *Implementation { return &Implementation{someField: "Hello"} } func main() { var a IFace a = Create() a.SetSomeField("World") fmt.Println(a.GetSomeField()) }
В этом обновленном коде функция Create возвращает указатель в struct реализации, которая реализует интерфейс IFACE. Следовательно, переменная типа IFACE может относиться к указателю к структуре реализации, позволяя методу SetSomefield изменять его значение.
]Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3