- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有一个程序使用了多种类型的模块,但所有不同类型的模块都共享某些方法。我正在尝试构建一个可以为不同类型的模块重用的通用工厂,但我缺少接口(interface)继承之类的东西,或者在 Go 中会调用它。
这是我试图尽可能简化的示例:
有一个使用通用模块
接口(interface)的通用工厂:
package main
var (
modules []Module
)
type Module interface {
RegisterFlagSet()
GetName() (string)
}
type Factory struct {
instances []Module
}
func RegisterModules(modules []Module) {
modules = modules
}
func (f *Factory) registerFlagSets() {
for _,inst := range f.instances {
inst.RegisterFlagSet()
}
}
func (f *Factory) GetInstance(seek string)(Module) {
for _,inst := range f.instances {
if (inst.GetName() == seek) {
return inst
}
}
panic("cannot find module")
}
然后是模块类型 Timer
的更具体的实现。我正在尝试尽可能多地重用工厂:
package main
import (
"time"
)
var (
timer_modules = []Timer{
// list all the timer modules here
}
)
type Timer interface {
Module
GetTicker() (*time.Ticker)
}
type TimerFactory struct {
Factory
}
func NewTimerFactory() TimerFactory {
tfact := TimerFactory{}
RegisterModules(timer_modules)
return tfact
}
当我尝试构建时出现此错误:
timer_factory.go:25: cannot use timer_modules (type []Timer) as type []Module in argument to RegisterModules
我不明白为什么 type []Timer
的变量不能用作 type []Module
因为接口(interface) Module< 的所有方法
也在接口(interface) Timer
中,所以它们应该兼容还是不兼容?有没有办法让它们兼容?
最佳答案
https://golang.org/doc/faq#convert_slice_of_interface给出解释。解决方法之一是实现一个新的寄存器函数:
func RegisterModule(m Module) {
modules = append(modules, m)
}
并以仅多两行为代价在一个范围内调用该函数:
func NewTimerFactory() TimerFactory {
tfact := TimerFactory{}
for _, t := range timer_modules {
RegisterModule(t)
}
return tfact
}
关于go - Go 中的接口(interface)层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39943369/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!