Подтвердить что ты не робот

Проверьте интерфейс nil и nil в Go

В настоящее время я использую эту вспомогательную функцию для проверки интерфейсов nil и nil.

func isNil(a interface{}) bool {
  defer func() { recover() }()
  return a == nil || reflect.ValueOf(a).IsNil()
}

Так как reflect.ValueOf(a).IsNil() паника, если значение Kind является чем-то другим, кроме Chan, Func, Map, Ptr, Interface или Slice, я отложил отложенный recover(), чтобы поймать те.

Есть ли лучший способ добиться этой проверки? Он считает, что для этого должен быть более прямой способ.

4b9b3361

Ответ 1

См. например, Кайл в этом thread в списке рассылки golang-nut.

Вкратце: если вы никогда не храните (*T)(nil) в интерфейсе, вы можете надежно использовать сравнение с nil, не нужно использовать отражение. С другой стороны, назначение нетипизированного nil для интерфейса всегда в порядке.