如果我有一个类型同义词FooType和一个函数Foo,有没有办法坚持它Foo是FooType. 我想要一个显式,FooType以便我可以在类型开关中使用它。var如果可以避免的话,我不想使用and 函数文字,因为这样当我尝试重新定义函数时就不会出错。package mainimport ( "fmt" "reflect")type FooType func(a int, b float64) float32// foo happens to be of FooType, but this relationship isn't// enforced by the compiler.func Foo(a int, b float64) float32 { return 2.4}func main () { fmt.Printf("type of foo: %v\n", reflect.TypeOf(foo))}这样做的动机是我有两种类型的过滤器可以处理文本流或结构化对象。// process items from channelfunction filter1(in <-chan interface{}, out chan<- chan interface{}) { for item := range in { out <- doStuff(item) }}// process items from Scannerfunction filter2(scanner *Scanner, out chan<- chan interface{}) { for scanner.Scan() { out <- doStuff(scanner.Text()) }}我希望能够编写一个函数,该函数接受一个*exec.Cmd过滤器数组并将它们组合起来。
1 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
您可以分配Foo一个匿名变量类型FooType,如果类型不匹配,编译器会抱怨它,例如:
package main
type FooType func(a int, b float64) float32
func Foo(a int, b float64) float32 {
return 2.4
}
func NotAFoo(a string, b bool) float32 {
return 2.4
}
var _ FooType = Foo
var _ FooType = NotAFoo
func main() {
}
请注意,var _ FooType = NotAFoo爆炸。如果您将其注释掉,则程序运行良好。
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报
0/150
提交
取消