注意:我正在将这个问题编辑为一个具体示例,说明我为什么要这样做,这就是为什么某些答案在上下文中可能不再有意义的原因。
我正在编写一些代码来传递来自输入的数据。数据采用标签的形式,这些标签具有它们包含的数据类型的标识符,然后是数据。
不幸的是,我无法控制输入,并且事先不知道其中会有什么标签,一个可能是一个整数,另一个可能是一个字符串,还有一个可能是一个整数数组。
当我需要像处理相同类型的所有标签时出现问题,例如,如果我有一片标签,一个接受或返回标签的函数。
到目前为止,我所看到的解决方案是用一个空接口定义切片/函数,这将允许我这样做,但这有点不受欢迎,因为它不会告诉其他使用该包的人关于预期的类型并且也有点违背了首先使用类型化语言的观点。
然而,接口似乎是这里的解决方案,我希望有一个Tag接口可以传递,这确实需要我在它们上面定义方法,但实际上它们不需要任何方法。
我目前的解决方案是这样的
type Tag interface{
implementTag()
}
type TagInt int
func (tag TagInt) implementTag() {}
type TagString string
func (tag TagInt) implementTag() {}
虽然这确实有效并解决了我的问题,但必须为此定义虚拟方法感觉非常错误。
所以我的问题总结如下:有没有什么方法可以定义某物是 a 而Tag不必定义虚拟方法?
慕哥6287543
神不在的星期二
UYOU
相关分类