登录
首页 >  Golang >  Go问答

如何在 Golang 语言中访问接口字段的底层结构字段值?

来源:stackoverflow

时间:2024-02-17 16:18:23 205浏览 收藏

本篇文章向大家介绍《如何在 Golang 语言中访问接口字段的底层结构字段值?》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

如何通过接口获取结构体字段值是否有一些技巧(直接不可能)?

我在文件 ./animals/mammal.go 中有一个接口:

type mammal interface {
     sound()
}

我在同一个文件中实现了:

type dog struct {
     name string
     age int
}

func (d *dog) sound {
     fmt.println("say my name...", d.name)
}

在其他包../../police/animals.go中我有另一个结构:

type policeman struct {
     animal mammal
     policeman name
     id int
}

我希望能够像这样实现它:

func (p *Policeman) Arrest {
     fmt.Println("Hands up, police! Bite him, ", p.Animal.Name)
}

编译器不会让我这样做,因为 p.animal 是一个接口类型,当然...... 但是,是否有应用程序设计技巧/模式可以让我做到这一点。我的观点是,一旦我写了警察结构,我希望确定,当我将动物从狗更改为猫或其他动物时,我不会重写“逮捕”方法,所以这就是问题的重点!


正确答案


如果在您的上下文中,以下陈述为真“所有哺乳动物都有名字”,您可以将方法 name() 添加到接口 mammal ,您的示例将像这样工作:

type Mammal interface {
     Sound()
     Name() string
}

func (p *Policeman) Arrest {
     fmt.Println("Hands up, police! Bite him, ", p.Animal.Name())
}

如果该陈述不正确,那么您想要的就是不可能的,因为对于没有名称的哺乳动物,仍不清楚如何调用 name()

请注意,您还需要为 dog 实现 name() 方法。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何在 Golang 语言中访问接口字段的底层结构字段值?》文章吧,也可关注golang学习网公众号了解相关技术文章。

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