go 语言中的一个语法

var _ HelloInter = (*Cat)(nil)

type HelloInter interface {
    Hello() string
}

type Cat struct {
    HelloInter
    name string
}

func (c *Cat) Hello() string {
    return c.name + "miaomiao"
}

其中var _ HelloInter = (*Cat)(nil)这行代码是啥意思呢?

阅读 1.6k
1 个回答

先说下划线。

var s string = "hello world";

这是正常声明一个变量,s 是变量名,string 是变量类型,等号后面是赋值。

如果我们后面不需要访问这个变量、只是需要定义(常见于丢弃函数的返回值),那么就用下划线占位。

而原题等号后面的赋值就是一个普通的指针类型强转。


这句代码其实在运行时不起到任何作用,而是一种编译时的类型防守策略。如果你的 Cat 没有实现 HelloInter,那么这句代码在编译时就会报错,这样你就知道了这里的实现是有问题的,可能你修改了接口忘了同步修改其子类,结果等到运行时才能知道有问题就为时已晚。

而之所以用下划线占位,就因为确实不需要访问这个变量,只需要看强转能不能编译通过。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题