Anonymous Quiz
6%
data.val = <nil>
8%
data.val = 0
83%
data.val = 5
3%
data.val = undefined
😁3❤1👍1
🐹 Go error handling nuance
В стандартной библиотеке
оно не считает `ValueErrorType` и `*ValueErrorType` одним и тем же типом ошибки.
В отличие от него,
👉 Документация: https://docs.go101.org/std/pkg/go101.org/nstd.html#name-TrackErrorOf
Пример:
💡 Помни, что в Go T и *T — это разные типы, даже если они реализуют один интерфейс.
nstd.TrackErrorOf упрощает такие случаи и делает обработку ошибок гибче.
В стандартной библиотеке
errors.As
есть тонкость: оно не считает `ValueErrorType` и `*ValueErrorType` одним и тем же типом ошибки.
В отличие от него,
nstd.TrackErrorOf
из go101.org/nstd
обрабатывает оба варианта как одинаковые типы ошибок. 👉 Документация: https://docs.go101.org/std/pkg/go101.org/nstd.html#name-TrackErrorOf
Пример:
package main
import "errors"
type E struct{}
func (E) Error() string { return "" }
func main() {
e := &E{}
println(
errors.As(*e, &e), // false
errors.As(*e, e), // false
errors.As(e, e), // true
errors.As(e, &e), // true
)
}
💡 Помни, что в Go T и *T — это разные типы, даже если они реализуют один интерфейс.
nstd.TrackErrorOf упрощает такие случаи и делает обработку ошибок гибче.
❤3👍2