Практическая ситуация: функция возвращает интерфейс, внутри которого оказался nil-указатель. Как объяснить, почему сравнение результата с nil даёт false?
База Hintsage
Интерфейсы и типы
Интерфейсы, методы, type assertions и generics.
Практика
Вопросы: Интерфейсы и типы
Объясните механизм: когда тип-значение в Go удовлетворяет интерфейсу, а когда для этого требуется указатель на тип?
При утверждении типа интерфейсного значения к другому интерфейсу что определяет успех: статический или динамический тип значения?
Как интерфейсное ограничение определяет методы, доступные параметру типа в обобщённой функции Go?
Разбор кода: определите наблюдаемое поведение программы и объясните причину сбоя при сравнении интерфейсных значений.
package main
import "fmt"
type Box interface {
Value() any
}
type data []int
func (data) Value() any { return nil }
func main() {
var a Box = data{1}
var b Box = data{1}
fmt.Println(a == b)
}
Определите ошибку компиляции и объясните её причину. Зачем интерфейс Number можно передать как ограничение, но нельзя использовать как тип переменной?
package main
type Number interface {
~int | ~float64
}
func Sum[T Number](a, b T) T {
return a + b
}
func main() {
var x Number
_ = x
}
В type switch динамическое значение удовлетворяет нескольким интерфейсным case: по какому правилу Go выбирает ветку?
Что именно фиксирует метод-значение, полученное из интерфейсного значения, в момент его создания?
По какой причине Go не разрешает напрямую выполнять type assertion над значением параметрического типа?
Предскажите, чем завершится встраивание в интерфейс двух методов с одинаковым именем, но разными сигнатурами?
Сравните type assertion и преобразование типов в Go: что проверяется во время выполнения, а что определяется на этапе компиляции?
Что произойдёт с внешними типами, реализующими публичный интерфейс, если в этот интерфейс добавить новый метод?
В обобщённой функции параметр ограничен comparable: почему его значение всё равно нельзя безусловно сравнить с nil?
Может ли тип из другого пакета реализовать интерфейс Go, содержащий неэкспортируемый метод?
При вызове метода через интерфейс какой тип определяет фактически выполняемую реализацию?
В структуре Go с встроенным типом: когда методы встроенного типа делают внешнюю структуру реализующей интерфейс?
Что происходит при встраивании двух интерфейсов, объявляющих один и тот же метод с одинаковой сигнатурой?
Разберите ситуацию: тип имеет метод с тем же именем и параметрами, что у интерфейса, но возвращает конкретный тип вместо интерфейсного. Считает ли Go такой тип реализующим интерфейс?
В чём причина того, что ограничение по базовому типу int принимает именованный тип, основанный на int?
Практическая ситуация: тип имеет метод, возвращающий int. Почему он удовлетворяет параметризованному интерфейсу с результатом int, но не тому же интерфейсу с результатом any?
Показано 1–20 из 50