首页 > 试题广场 >

在 Go 语言中,接口(interface)是一个核心特性。

[单选题]
在 Go 语言中,接口(interface)是一个核心特性。请看下面的代码,它的输出结果是什么?
package main
import "fmt"
type MyError struct{}
func (e *MyError) Error() string {
    return "error"
}
func getError() error {
    var e *MyError = nil
    return e
}
func main() {
    err := getError()
    if err == nil {
        fmt.Println("err is nil")
    } else {
        fmt.Println("err is not nil")
    }
}
  • err is nil
  • err is not nil
  • 代码无法编译通过
  • 程序运行时发生 panic
一个接口变量实际上是一个包含两个指针的“元组”:
类型指针 (Type Pointer): 指向该接口变量所持有的具体类型的信息(例如 *MyError)。
数据指针 (Data Pointer): 指向该接口变量所持有的具体值(数据)。
一个接口变量只有在类型指针和数据指针都为 nil 的情况下,它才等于 nil。

var e *MyError = nil
在 getError 函数内部,你创建了一个变量 e。
e 的类型是 *MyError。
e 的值是 nil。
此时,e 是一个有类型的 nil (typed nil),而不是一个纯粹的 nil。
发表于 2025-09-19 17:30:09 回复(0)