首页 > 试题广场 >

关于 Go 的接口和类型断言,以下代码的输出是什么? pac

[单选题]
关于 Go 的接口和类型断言,以下代码的输出是什么?
package main
import "fmt"
type Greeter interface {
    Greet() string
}
type Person struct {
    Name string
}
func (p Person) Greet() string {
    return "Hello, " + p.Name
}
func main() {
    var g Greeter = Person{"Alice"}
    fmt.Println(g.Greet())
    if p, ok := g.(*Person); ok {
        fmt.Println("Name:", p.Name)
    } else {
        fmt.Println("Type assertion failed")
    }
}
  • Hello, Alice
    Name: Alice
  • Hello, Alice
    Type assertion failed
  • 编译错误
  • 运行时 panic
首先记住指针类型拥有值类型声明的方法,但是反过来不行。
但是在编码时却可以通过值类型调用指针类型声明的方法,这与前面说的看似违背,但实际上是编译器的语法糖,会自动将值类型转换为指针类型在进行调用。
所以当值类型声明某个接口的所有方法(隐式实现该接口),其指针类型相当于更加隐式对应实现了该接口。
但是注意这里是对Interface接口进行类型断言,必须类型匹配才会成功,不存在所谓的语法糖
发表于 2025-11-01 16:14:02 回复(0)