doupingyun73833 2013-08-01 12:47
浏览 61
已采纳

golang接口符合性编译类型检查

I see the following statements from camlistore(http://code.google.com/p/camlistore/source/browse/pkg/cacher/cacher.go).

var (
        _ blobref.StreamingFetcher = (*CachingFetcher)(nil)
        _ blobref.SeekFetcher      = (*CachingFetcher)(nil)
        _ blobref.StreamingFetcher = (*DiskCache)(nil)
        _ blobref.SeekFetcher      = (*DiskCache)(nil)
)

I understand that no variables are created and the statements ensure compiler checks that CachingFether implements public functions of StreamingFetcher and SeekFetcher. RHS portion uses a pointer constructor syntax with a nil parameter. What does this syntax mean in Go language ?

  • 写回答

1条回答 默认 最新

  • douke6857 2013-08-01 12:50
    关注

    (*T)(nil) is a Conversion. In this case it stands for a typed nil, ie. the same value which, for example

    var p *T
    

    has before assigning anything to it.

    The standard syntax of a conversion is T(expr), but the priority of the * would bind it wrongly in

    *T(expr)
    

    This syntax means dereferencing the return value of function T with one argument expr. That's why the conversion has an alternative syntax:

    (T)(expr)
    

    where T can of course be *U. Therefore

    (*U)(expr)
    

    is the generalized form of what you see in the Camlistore repository.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab