鉴于以下结构Foo
和处理多种类型的目标(其中Handle
可能是Read
,Write
等)。我明白,当我们使用空的界面时,我们会失去编译时类型检查,但除此之外,每个类型的优缺点是什么?最后,实现这个目标的最习惯的方式是什么?一种功能开启的类型vs许多类型的功能
package main
type Foo struct {
A int
B string
}
//Handle all types with switch
func (f *Foo) Handle(obj interface{}) {
switch obj := obj.(type) {
case int:
//do int stuff...
f.A + obj
case string:
//do string stuff...
f.B + obj
default:
panic("Unknown type")
}
}
//Handle each type individually
func (f *Foo) HandleInt(i int) {
//do int stuff...
f.A + i
}
func (f *Foo) HandleString(s string) {
//do string stuff...
f.B + s
}
是的,[u] int类型的数量实际上让我感到困扰。我并不期待每个内置类型都有一个方法。美学上,我宁愿有一种方法并记录下来。此外,可能包括3种特定方法和1种通用方法(两种方法)都会混淆用户。 – jpillora 2014-08-30 07:14:11