Function 在Golang中声明类型别名为的函数
在Golang有可能做这样的事情吗Function 在Golang中声明类型别名为的函数,function,go,type-alias,Function,Go,Type Alias,在Golang有可能做这样的事情吗 package main import "fmt" type myFunType func(x int) int var myFun myFunType = myFunType { return x } // (1) func doSomething(f myFunType) { fmt.Println(f(10)) } func main() { doSomething(myFun) } 换句话说,是否可以使用函数类型别名声明
package main
import "fmt"
type myFunType func(x int) int
var myFun myFunType = myFunType { return x } // (1)
func doSomething(f myFunType) {
fmt.Println(f(10))
}
func main() {
doSomething(myFun)
}
换句话说,是否可以使用函数类型别名声明函数类型变量,而无需重复签名?
或者,当创建函数类型的变量时,是否有办法不总是重新键入整个函数签名
我希望上面的代码示例与下面的代码示例等效(将第(1)
行替换为第(2)
行),导致编译错误语法错误:意外返回,需要表达式
package main
import "fmt"
type myFunType func(x int) int
var myFun myFunType = func(x int) int { return 2 * x } // (2)
func doSomething(f myFunType) {
fmt.Println(f(10))
}
func main() {
doSomething(myFun)
}
从
函数文字必须包含func
关键字和。语法不允许使用函数类型
同样的道理也适用于
不允许使用函数类型(而不是签名)
所以不,你想要的是不可能的。之所以这样做,是因为签名(函数类型)不包括参数名(只是它们的顺序和类型),但是当您实际“创建”一个函数值时,您需要一种引用它们的方法,并且只有函数类型,您没有参数的名称
有关更多详细信息,请参阅相关问题:
var myFun myFunType=func(x int)int{return 2*x}//(2)
这没关系,myFun必须包含func关键字,这意味着它是myFunType的func类型,参数和返回类型必须与声明的myFunType相同。否,但在golang中,您可以使用名称定义方法并使用它们
举个例子。有时,在文件顶部,甚至在整个包中,有一种常见的定义错误的方法,如下所示:
ErrFileNotFound:=func(文件字符串)错误{返回错误.New(fmt.Sprintf(“未找到文件%v”,文件))}
这个函数可以在文件中多次使用,比如
file,err:=os.Open(filenameRequestedToOpen)//用于读取访问。
如果出错!=零{
log.Fatal(ErrFileNotFound(filenameRequestedToOpen))
}
或者从另一个角度看这一点:如果您有一系列函数都使用相同的签名运行,并且您担心必须反复输入,也许是时候将它封装到一个结构中,并编写接受该结构作为接收器的方法了?你的意思是将函数的参数封装到一个结构中?是的,这将是一个有效的替代方案。即使你的答案是正确的,正确地表达它始终是一个好主意:),比如,对它进行更多的硼化并格式化代码部分。好吧,我知道这是正确的,但它对我没有帮助,因为我不想重复函数的签名。也就是说,问题是如何实现(1)
。myFunType包含func(x int)和return(int),因此,var myFun myFunType=myFunType{return x}意味着func(x int){return x}{return x},我想=
FunctionLit = "func" Signature FunctionBody .
FunctionDecl = "func" FunctionName Signature [ FunctionBody ] .