第4章有两处不明白
bluedragonflyliu opened this issue · 4 comments
我买了书之后看到 第4章 第一节有两处代码无法理解能不能尽量详细解释一下
第一处
type HelloServiceInterface = interface {
Hello(request string, reply *string) error
}
我通常看到的是 type interface A{} 这种形式,书中这处方式与普通方式区别与作用是啥
第二处
var _ HelloServiceInterface = (*HelloServiceClient)(nil)
这段更不能理解
是将nil 强转为 HelloServiceClient 指针吗,但是前面的"_" 又该怎么解释
问题2:错误使用接口会在编译期报错. 所以可以利用这个机制让部分问题在编译期暴露.
如果 *HelloServiceClient 与 HelloServiceInterface 的接口不匹配, 那么语句 var _ HelloServiceInterface = (*HelloServiceClient)(nil) 将无法编译通过.
下划线是表示抛弃这个值,属于Go语法基础内容,在本例中,这个变量在下文是没有用的,仅仅是为了确保*HelloServiceClient实现了HelloServiceInterface接口,Go中未被使用的变量会导致编译错误,所以这里使用下划线忽略该变量
谢谢
虽然issue已经关了,但还是回答一下问题1吧,因为刚刚才弄明白的,之前并不知道有什么区别。
详见Go Language Specification里的Type Declarations,两种方法只是形式上的区别,都符合Go的文法(Grammar)
虽然issue已经关了,但还是回答一下问题1吧,因为刚刚才弄明白的,之前并不知道有什么区别。 详见Go Language Specification里的Type Declarations,两种方法只是形式上的区别,都符合Go的文法(Grammar)
一种是命名,一种是别名。但是对于接口来说,其实没啥区别(因为接口不看类型,只看方法集是否满足)。别名这种需要结合匿名类型才有意思,也可以结合最近的泛型看看