类型断言失败,从golang中的接口{}进行了正确的强制转换

类型断言失败,从golang中的接口{}进行了正确的强制转换,go,Go,下面是我从下面的简单复制案例中得到的输出: 2015/06/22 21:09:50 ok: false 2015/06/22 21:09:50 stub: *main.Stub <nil> 错误是: func (buf *Buffer) Get(index int) interface{} { return &buf.values[index] } 您要执行以下操作: func (buf *Buffer) Get(index int) interface{} {

下面是我从下面的简单复制案例中得到的输出:

2015/06/22 21:09:50 ok: false
2015/06/22 21:09:50 stub: *main.Stub <nil>
错误是:

func (buf *Buffer) Get(index int) interface{} {
    return &buf.values[index]
}
您要执行以下操作:

func (buf *Buffer) Get(index int) interface{} {
    return buf.values[index]
}
返回&buf.values[index]时,返回的是指向接口的指针。这是一个*(*存根)(在某种意义上)

错误是:

func (buf *Buffer) Get(index int) interface{} {
    return &buf.values[index]
}
您要执行以下操作:

func (buf *Buffer) Get(index int) interface{} {
    return buf.values[index]
}

返回&buf.values[index]时,返回的是指向接口的指针。这是一个*(*存根)(在某种意义上)

谢谢你的指针。我以前在界面上绊倒了,我会再做一次。我不喜欢golang处理接口{}和指针的方式。我将尝试阅读更多关于它的资料,直到它点击为止。在IL中应对龙卷风保持安全。将接口视为具有类型和值字段的结构。在执行someInterfaceVar.(ConcreteType)断言时,将检查该类型。因为go值只是原始数据,所以它们必须包含数据的类型,这样才能维护运行时的安全性。好的,这很有帮助。我仍然相信编译器可以警告我这一点?显然,当ok==false时正确显示的类型表明某些内容没有正确报告。你不觉得吗?是的,这让人困惑。可能来自String(),显示具体值,而不是引用类型(即接口类型本身),感谢指针。我以前在界面上绊倒了,我会再做一次。我不喜欢golang处理接口{}和指针的方式。我将尝试阅读更多关于它的资料,直到它点击为止。在IL中应对龙卷风保持安全。将接口视为具有类型和值字段的结构。在执行someInterfaceVar.(ConcreteType)断言时,将检查该类型。因为go值只是原始数据,所以它们必须包含数据的类型,这样才能维护运行时的安全性。好的,这很有帮助。我仍然相信编译器可以警告我这一点?显然,当ok==false时正确显示的类型表明某些内容没有正确报告。你不觉得吗?是的,这让人困惑。可能来自String(),它显示了具体的值,而不是引用类型(即接口类型本身),只是术语上的一个小注释-Go开发人员使用术语“”而不是“casting”。只是术语上的一个小注释-Go开发人员使用术语“”而不是“casting”。