2013-08-01 36 views
3

我从camlistore(http://code.google.com/p/camlistore/source/browse/pkg/cacher/cacher.go)看到以下语句。golang接口符合性编译类型检查

据我所知,没有创建变量和语句确保CachingFether实现StreamingFetcher和SeekFetcher的公共职能编译器检查。 RHS部分使用带有nil参数的指针构造函数语法。 Go语言中这个语法意味着什么?

+0

我很好奇为什么检查是必要的。在我看来,如果他们真的/使用过/这些值,编译器会做检查吗?我能想到的唯一解释是他们使用'unsafe'软件包,并且他们将执行他们希望编译器无论如何检查的非检查操作。但他们不会在该文件中导入“不安全”。有任何想法吗? – joshlf

+0

这是一个静态(编译时)检查RHS类型是否满足LHS接口。通过这种检查,对RHS方法集的意外更改立即被编译器拒绝。 – zzzz

回答

5

(*T)(nil)Conversion。在这种情况下,它代表一个输入零,即。相同的值,例如

var p *T 

在分配任何东西给它之前。

转换的标准语法是T(expr),但*的优先级将在

*T(expr) 

错误地结合它此语法装置使用一个参数expr解除引用的功能T返回值。这就是为什么转换有一个替代语法:

(T)(expr) 

其中T当然可以*U。因此,

(*U)(expr) 

是您在Camlistore存储库中看到的一般形式。