猿问

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

如果我有一个类型同义词FooType和一个函数Foo,有没有办法坚持它Foo是FooType. 我想要一个显式,FooType以便我可以在类型开关中使用它。


var如果可以避免的话,我不想使用and 函数文字,因为这样当我尝试重新定义函数时就不会出错。


package main


import (

    "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 channel

function filter1(in <-chan interface{}, out chan<- chan interface{}) {

    for item := range in {

        out <- doStuff(item)

    }

}


// process items from Scanner

function filter2(scanner *Scanner, out chan<- chan interface{}) {

    for scanner.Scan() {

        out <- doStuff(scanner.Text())

    }

}

我希望能够编写一个函数,该函数接受一个*exec.Cmd过滤器数组并将它们组合起来。


茅侃侃
浏览 153回答 1
1回答

阿波罗的战车

您可以分配Foo一个匿名变量类型FooType,如果类型不匹配,编译器会抱怨它,例如:package maintype FooType func(a int, b float64) float32func Foo(a int, b float64) float32 {&nbsp; &nbsp; return 2.4}func NotAFoo(a string, b bool) float32 {&nbsp; &nbsp; return 2.4}var _ FooType = Foovar _ FooType = NotAFoofunc main() {}请注意,var _ FooType = NotAFoo爆炸。如果您将其注释掉,则程序运行良好。
随时随地看视频慕课网APP

相关分类

Go
我要回答