«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я не могу использовать переменную типа `*t` в качестве` stringer` in go generics?

Почему я не могу использовать переменную типа `*t` в качестве` stringer` in go generics?

Опубликовано в 2025-03-24
Просматривать:288

] Why Can't I Use a `*T` Type Variable as a `Stringer` in Go Generics?

понимание «не может использовать переменную типа *t в качестве типа стрингера в аргументе» вместо. Следовательно, *t - это не то же самое, что *foobar или *bar. В настоящее время ваши типы Foo и Bar реализуют этот метод на приемниках указателей, но *T не обладают по своей сути, не обладает этим методом.

исправление проблемы

    есть два основных подхода, чтобы решить эту проблему:
  • . 1. Защита типа безопасность с утверждением типа (менее оптимально)
  • утверждает, что *T реализует Stringer, используя любой (t). (Stringer) в функции DO.
этот подход может привести к панике, если t не реализует стрингер. Переопределяйте ограничения и настраивает Generics (предпочтительнее)

добавить стрингер в качестве ограничения в интерфейс FOOBAR.

Используйте приемники указателя для типов FOO и стержня, чтобы выравнивать конструкцию. interface.

передавать экземпляр ограниченного типа в качестве аргумента в пользу Blah.

  • пересмотренный код:
  • type foobar [t foo | бар] интерфейс { *Т Стрингер } Func Blah [t foo | бар, u foobar [t]] () { var t сделать (u (& t)) } func main () { бла [foo] () }

в этом пересмотренном коде:

] интерфейс FOOBAR включает в себя стрингер как ограничение. ограничения.
  • blah принимает аргумент типа U, который является экземпляром ограниченного интерфейса Foobar.
  • ]
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3