猿问

Golang 返回 nil

我试图围绕 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在那种情况下返回如何满足编译器。有没有可以指向我的资源?


慕的地8271018
浏览 253回答 1
1回答

Smart猫小萌

这类似于返回 nil 错误:在幕后,接口被实现为两个元素,一个类型和一个值。值,称为接口的动态值,是一个任意的具体值,类型是值的类型。对于int值3,接口值示意性地包含 ( int, 3)。接口值nil仅当内部值和类型都未设置时, ( nil, nil)。特别是,nil接口将始终包含一个nil类型。如果我们*int在接口值中存储类型指针,则内部类型将*int与指针的值无关:( *int, nil)。因此,non-nil当内部指针为 时,这样的接口值将是偶数nil。这nil是接口的零值revel.Result。
随时随地看视频慕课网APP

相关分类

Go
我要回答