Sobes.tech
Back to questions
Principal
1

Как проверить что значение внутри interface{} равно nil (написать код)?

Companies where asked
BetBoom

Answer from AI

sobes.tech AI

В Go, чтобы проверить, что значение типа interface{} равно nil, нужно проверить и сам интерфейс, и его внутреннее значение. Пример:

var val interface{}

if val == nil {
    // val равен nil
}

// Если val содержит указатель или другой тип, нужно проверить внутреннее значение через reflect:
import "reflect"

func isNil(i interface{}) bool {
    if i == nil {
        return true
    }
    v := reflect.ValueOf(i)
    switch v.Kind() {
    case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice:
        return v.IsNil()
    }
    return false
}

// Использование:

var x interface{} = (*int)(nil)
fmt.Println(isNil(x)) // true

var y interface{} = 0
fmt.Println(isNil(y)) // false

Так как interface{} содержит тип и значение, просто сравнение с nil верно только если и тип, и значение отсутствуют.