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

Golang 坚持包作用域的函数具有特定类型

Golang 坚持包作用域的函数具有特定类型

Go
茅侃侃 2021-12-07 18:55:41
如果我有一个类型同义词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爆炸。如果您将其注释掉,则程序运行良好。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

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