登录
首页 >  Golang >  Go问答

回溯到更专业的界面

来源:Golang技术栈

时间:2023-03-22 09:04:15 384浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《回溯到更专业的界面》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我正在写一个围棋游戏。在 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())
}

这不会编译,因为它不能告诉“实体”是一个物理实体。这种方法的合适替代方法是什么?

正确答案

使用类型断言。例如,

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

今天关于《回溯到更专业的界面》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>