go - 回溯到更专业的界面

标签 go

我正在编写一个围棋游戏。在 C++ 中,我会将所有实体类存储在 BaseEntity 类的数组中。如果一个实体需要在世界上移动,它会是一个从 BaseEntity 派生的 PhysEntity,但具有附加的方法。我试图模仿这是go:

package main

type Entity interface {
    a() string
}

type PhysEntity interface {
    Entity
    b() string
}

type BaseEntity struct { }
func (e *BaseEntity) a() string { return "Hello " }

type BasePhysEntity struct { BaseEntity }
func (e *BasePhysEntity) b() string { return " World!" }

func main() {
    physEnt := PhysEntity(new(BasePhysEntity))
    entity := Entity(physEnt)
    print(entity.a())
    original := PhysEntity(entity)
// ERROR on line above: cannot convert physEnt (type PhysEntity) to type Entity:
    println(original.b())
}

这将无法编译,因为它无法判断 'entity' 是一个 PhysEntity。这种方法有什么合适的替代方法?

最佳答案

使用 type assertion .例如,

original, ok := entity.(PhysEntity)
if ok {
    println(original.b())
}

关于go - 回溯到更专业的界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4799905/

相关文章:

struct - 在 Golang 中返回接口(interface)

google-app-engine - 应用引擎推送任务在测试中总是返回 404

go - Terraform 自定义提供程序访问生命周期元数据

go - 为什么这两个错误不相等

go - 如何包装路由处理函数 gin.HandlerFunc

svg - 将参数传递给 HandlerFunc

google-app-engine - 为什么调用此方法会导致我的应用超出免费配额?

go - 使用 kafka go 读取 __consumer_offsets

html - Golang HTML 模板嵌套范围循环

azure - 如何使用go从azure队列订阅接收消息