golang interface compliance compile type check

前端 未结 1 1397
执笔经年
执笔经年 2021-01-12 18:51

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

var (
        _ blobref.StreamingFet         


        
相关标签:
1条回答
  • 2021-01-12 19:33

    (*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.

    0 讨论(0)
提交回复
热议问题