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 верно только если и тип, и значение отсутствуют.