【问题标题】:Have trouble understanding a piece of golang code无法理解一段 golang 代码
【发布时间】:2015-08-22 11:35:58
【问题描述】:
package main

type Writeable interface {
    OnWrite() interface{}
}

type Result struct {
    Message string
}

func (r *Result) OnWrite() interface{} {
    return r.Message
}

// what does this line mean? what is the purpose?
var _ Writeable = (*Result)(nil)


func main() {

}

代码 sn-p 中的 cmets 表达了我的困惑。 据我了解,注释行通知编译器检查结构是否实现了接口,但我不太确定。有人可以帮忙解释一下目的吗?

【问题讨论】:

标签: methods go interface


【解决方案1】:

正如你所说,这是一种验证Result 实现Writeable 的方法。来自GO FAQ:

您可以要求编译器检查类型 T 是否实现了 通过尝试分配接口 I:

type T struct{} 
var _ I = T{}   // Verify that T implements I.

空白标识符 _ 代表此处不需要的变量名(从而防止“已声明但未使用”错误)。

(*Result)(nil) 通过converting nil 到*Result 创建一个指向Result 类型值的未初始​​化指针。这样可以避免像 new(Result) 或 &Result{} 那样为空结构分配内存。

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 2018-02-21
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多