РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
476 of 1593 menu

Nil-интерфейс

Nil-интерфейс — это интерфейсная переменная, у которой отсутствует динамический тип и динамическое значение. В отличие от интерфейса, содержащего указатель на nil, такой интерфейс считается действительно пустым. Проверка if i == nil вернет true только в том случае, если у интерфейса не задан ни тип, ни значение. Понимание этой особенности помогает избежать ошибок при работе с интерфейсами и возвращаемыми значениями функций.

Синтаксис

Объявление интерфейсной переменной без присвоения значения создает nil-интерфейс. Такой интерфейс можно проверить на равенство с nil.

var i interface{} if i == nil { fmt.Println("i is nil") }

Пример

Создадим nil-интерфейс и проверим его на nil:

package main import "fmt" func main() { var i interface{} fmt.Printf("i == nil: %v\n", i == nil) fmt.Printf("i: %v\n", i) }

Результат выполнения кода:

"i == nil: true" "i: <nil>"

Пример

Ниже показано, что интерфейс, содержащий указатель на nil, не является nil-интерфейсом:

package main import "fmt" func main() { var p *int = nil var i interface{} = p fmt.Printf("i == nil: %v\n", i == nil) fmt.Printf("i: %v\n", i) }

Результат выполнения кода:

"i == nil: false" "i: <nil>"

Пример

Функция, возвращающая error, может вернуть nil-интерфейс только если возвращает явный nil:

package main import ( "errors" "fmt" ) func getError(flag bool) error { if flag { return errors.New("some error") } return nil } func main() { err := getError(false) fmt.Printf("err == nil: %v\n", err == nil) }

Результат выполнения кода:

"err == nil: true"

Смотрите также

  • функцию interface,
    которая описывает базовый синтаксис и назначение интерфейсов
  • функцию empty-interface,
    которая может хранить значения любого типа
  • функцию type-assertion,
    которая извлекает значение конкретного типа из интерфейса
  • функцию nil-pointer,
    которая сравнивает интерфейс с нулевым указателем
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить