Тест
Вопрос 2
Четыре вызова `checkError` печатают результат `err == nil`. Какая последовательность из четырёх `true`/`false`?
Go
package main
import "fmt"
type Err struct{}
func (e *Err) Error() string { return "test error" }
func checkError(err error) {
fmt.Println(err == nil)
}
func main() {
var err1 error
checkError(err1)
var err2 *Err
checkError(err2)
err3 := &Err{}
checkError(err3)
err3 = nil
checkError(err3)
}
`err1` — пустой интерфейс `error` → внутри `checkError` это `nil`. У `err2` динамический тип `*Err` с нулевым значением указателя — интерфейс не равен `nil`. После `&Err{}` значение ненулевое. После присваивания `err3 = nil` переменная имеет тип `*Err`, поэтому переданный в функцию интерфейс снова с «типизированным nil», не пустым интерфейсом — сравнение с `nil` снова ложно.