当我阅读docker / distribution源代码的副本时,我发现声明的变量让我很困惑。 The code is:
var _ FileInfo = FileInfoInternal{}
var _ FileInfo = &FileInfoInternal{}
我不知道声明是什么意思,希望得到一些帮助。
答案 0 :(得分:18)
来自FAQ:
您可以要求编译器检查类型T是否实现了 接口I尝试分配:
<ContentControl Content="{Binding YourDataObject}" ContentTemplate="{StaticResource YourDataTemplate}" />
在这种情况下,空白标识符_代表此处不需要的变量名称(从而防止“声明但未使用”错误)。
更为一般来自spec:
空白标识符提供了忽略右侧值的方法 在作业中:
type T struct{} var _ I = T{} // Verify that T implements I.
通过测试_ = x // evaluate x but ignore it
x, _ = f() // evaluate f() but ignore second result value
和FileInfoInternal{}
,检查接口是否使用值接收器实现。值接收器将接受值和指针,而指针接收器将仅使用指针,并且按值的第一次分配将失败。
实际上并不需要&FileInfoInternal{}
的第二个测试(由评论中的作者确认),因为第一个测试将通过值接收器传递并且在接收到指针时失败。因此第二次测试是多余的。
This是一篇很好的文章,它解释了值和指针接收器之间的区别以及它们如何被很好地使用。
答案 1 :(得分:1)
FileInfo
是interface,代码会检查此FileInfoInternal
implements此接口。