我试图围绕 Golang 的类型和接口进行思考,但在这样做时有点挣扎。无论如何,我看到的一个常见模式是func Whatever() (thing string, err error). 我知道所有这些是如何工作的,但我感到困惑的一件事是为什么可以return "thing", nil. 我正在查看的特定实例在这里陶醉-func (c *GorpController) Begin() revel.Result { txn, err := Dbm.Begin() if err != nil { panic(err) } c.Txn = txn return nil}revel.Result 是具有此签名的接口-type Result interface { Apply(req *Request, resp *Response)}无论如何,我只是好奇nil在那种情况下返回如何满足编译器。有没有可以指向我的资源?
1 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
这类似于返回 nil 错误:
在幕后,接口被实现为两个元素,一个类型和一个值。
值,称为接口的动态值,是一个任意的具体值,类型是值的类型。对于
int
值3
,接口值示意性地包含 (int, 3
)。接口值
nil
仅当内部值和类型都未设置时, (nil, nil
)。特别是,nil
接口将始终包含一个nil
类型。
如果我们*int
在接口值中存储类型指针,则内部类型将*int
与指针的值无关:(*int, nil
)。
因此,non-nil
当内部指针为 时,这样的接口值将是偶数nil
。
这nil
是接口的零值revel.Result
。
- 1 回答
- 0 关注
- 252 浏览
添加回答
举报
0/150
提交
取消