go - 来自接口(interface)值的底层指针类型

标签 go go-interface

如何从接口(interface)获取底层指针类型?

package main

import (
    "fmt"
)

type Car interface  {
    Drive() string
}
type MyCar struct   {
    name string
}
func (MyCar) Drive (  ) string  {
    return "rum rum"
}


func main() {
    var car Car
    mycar := &MyCar{name:"mycar"}
    car = mycar
    mycarptr, err :=  car.(*MyCar)
    mycarvalue, err2 :=  car.(MyCar)
    fmt.Printf( "as ptr failed: %t, as value failed: %t\n", err, err2 )
    fmt.Printf( "as ptr: %+v, as value: %+v", mycarptr, mycarvalue)
}

最佳答案

您对 *MyCar 的第一个断言工作正常

这是一个playground举例说明

您对 MyCar 的第二个断言将失败,因为它不是指针。

关于go - 来自接口(interface)值的底层指针类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26079892/

相关文章:

go - 在 go 中删除跟踪中的模块路径

go - 在 Go 中,如何检查接口(interface)是否实现了结构的所有导出方法?

Go接口(interface)返回类型

if-statement - Go 是否优化了无法访问的 if 语句?

unit-testing - 如何使用 Go 的 moq 模拟 http.Handler?

Golang 接口(interface) & *接口(interface)

go - 是否需要使用类型断言来访问接口(interface)返回的类型的值?

go - 为什么 App Engine Flexible Enviroment 不允许 WebSockets 和 HTTP/2 流量?

go - 为什么我们要在 Go 中使用空白标识符?

Go - html/template、template.ParseGlob() 和代码重用