Недавно я обнаружил, что какой-то код go работал в тестовой среде, где были некоторые неинициализированные переменные.Golang: Защитные интерфейсы для нулевых типов
Это приводит к панике, в которой была трассировка стека, содержащая некоторый код c вверху.
Есть ли способ, в функциях, чтобы мы могли четко определить структуру, на которую ссылаются, поскольку исполнительный элемент равен нулю? т.е.
func (d *Dog) canBark Bool {
//if d is nil, cryptic exception is thrown.
//is there a way to defend against this?
}
ошибка, которая выбрасывается в
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x0 pc=0x4ec83a]
goroutine 16 [running]:
runtime.panic(0x9b7400, 0xf7ddf3)
Кажется, что в ходу, такие более низкие ошибки уровня должно происходить очень редко, может быть, никогда вообще ...
Там может быть способ Golang справиться с nil ссылками, которые не загромождают код слишком много с if/else логикой. Например, в java вы можете обернуть большой сегмент кода в обработчик исключений нулевого указателя.
Напишите тесты для проверки таких панических ситуаций. В не-тестовом коде «паника» - правильная вещь для неправильного кода; так же, как с ошибками, связанными с ошибками, и т. д. –