Загрузка…
Загрузка…
Go · junior · сложность 2
Фраза «nil != nil» в Go обычно относится к интерфейсам и означает, что значение интерфейса может содержать type + value, где значение внутри — nil, но сам интерфейс не является nil.
Интерфейс состоит из двух частей:
Динамический тип
Динамическое значение
Интерфейс имеет статус nil только тогда, когда отсутствуют обе части.
У нас есть var p *MyType = nil.
Назначьте var i any = p.
Теперь i содержит:
введите: *MyType
значение: nil
Итак, i != nil, потому что типичная часть заполнена.
if err != nil или if x != nil может не вести себя как разработчик.
ожидает, если введенный nil будет заключен в интерфейс.Верните nil точно как «пустой интерфейс», а не введите nil внутри
interface.
Стройте error и другие результаты интерфейса с осторожностью.
При необходимости выполните явную проверку определенного типа через утверждение/переключатель.
В Go «nil != nil» — это не парадокс, а следствие двухкомпонентности интерфейса. Ключевое правило заключается в том, что интерфейс является nil только тогда, когда он не содержит ни динамического типа, ни динамического значения.
Фраза «nil != nil» в Go обычно относится к интерфейсам и означает, что значение интерфейса может содержать type + value, где значение внутри — nil, но сам интерфейс не является nil.