首页 > 试题广场 >

执行以下 Go 程序,将会输出什么? package mai

[单选题]
执行以下 Go 程序,将会输出什么?
package main
import "fmt"
type MyError struct{}
func (e *MyError) Error() string {
    return "error"
}
func isErrorNil(err error) bool {
    return err == nil
}
func main() {
    var e *MyError = nil
    if isErrorNil(e) {
        fmt.Println("is nil")
    } else {
        fmt.Println("is not nil")
    }
}
  • is nil
  • is not nil
  • 程序在运行时会发生 panic
  • 程序无法通过编译
典型问题:接口类型参数的nil判定问题。
Go中接口的内部表示有两部分,一类型信息,二数据指针。题中var声明并初始化了一个数据指针为nil的data,但类型信息为*MyError的变量。此外还知道*MyError类型是Error()的接收者,也就是error()接口的实现,所以isErrorNil(e)传递的是接口类型参数。而又接口的组成可知只有接口的内部两部分都为空才能算nil。

当 e 传递给 error 接口时,发生隐式转换,类型信息保留了,data是nil。
发表于 2026-01-13 09:33:04 回复(0)
error是interface类型
发表于 2025-11-27 23:55:11 回复(0)