为了账号安全,请及时绑定邮箱和手机立即绑定

将接口切片向下转换为子接口切片

将接口切片向下转换为子接口切片

Go
拉风的咖菲猫 2022-04-26 15:50:25
我试图更好地使用 Go 中的接口来描述特定的功能,并使用接口组合来编写更好、更易于理解的代码。我遇到了这个问题,这似乎是 go 接口的一个常见用例,但我似乎无法找出用于此应用程序的正确语法。这里有一些代码可以帮助解释我正在尝试做的事情:// Initializable is an interface to an object that can be initialized.type Initializable interface {    Initialize() error}// InitializeAll initializes an array of members.func InitializeAll(members []Initializable) error {    for _, member := range members {        err := member.Initialize()        if err != nil {            return err        }    }    return nil}// Host is an interface to an object providing a set of handlers for a web host.type Host interface {    Initializable    Hostname() string    RegisterHandlers(router *mux.Router)}// ConfigureHosts configures a set of hosts and initializes them.func ConfigureHosts(hosts []Host) (*mux.Router, error) {    err := InitializeAll(hosts) // compiler error here}这是错误:cannot use hosts (type []Host) as type []Initializable in argument InitializeAll。我最初的想法是我缺少某种向下转换的类型,我知道它适用于单个接口对象,但很难转换数组。当我尝试做err := InitializeAll(hosts.([]Initializable))时,我收到以下错误:invalid type assertion: hosts.([]Initializable) (non-interface type []Host on left)。对于此代码示例的设计,我很感激任何想法,也许还有关于正确语法或我可以做一些重构来解决这个问题的任何建议。谢谢!
查看完整描述

1 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

我似乎无法弄清楚用于此应用程序的正确语法

没有这样的语法。您根本无法(直接)执行此操作。


查看完整回答
反对 回复 2022-04-26
  • 1 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信