Syntax 如何在GO中使用函数类型声明函数
假设您声明了一个函数类型Syntax 如何在GO中使用函数类型声明函数,syntax,go,Syntax,Go,假设您声明了一个函数类型 type mapFunc func(value int) int 您可以使用此类型声明函数而不复制它吗?比如: doubleIt := mapFunc { return 2*value } 据我所知,最短的路仍然是: doubleIt := func (value int) int { return value * 2 } 所以它不会变得更短,而且我不认为将函数签名与其主体解耦会更具可读性。声明命名func类型的好处是在其他声明中使用它 由于以下规
type mapFunc func(value int) int
您可以使用此类型声明函数而不复制它吗?比如:
doubleIt := mapFunc {
return 2*value
}
据我所知,最短的路仍然是:
doubleIt := func (value int) int {
return value * 2
}
所以它不会变得更短,而且我不认为将函数签名与其主体解耦会更具可读性。声明命名func类型的好处是在其他声明中使用它
由于以下规则,不需要像doubleId:=mapFunc(func…
这样的额外转换:
如果两个函数类型具有相同数量的参数和结果值,则它们是相同的,相应的参数和结果类型是相同的,并且两个函数都是可变的,或者两者都不是。参数名和结果名不需要匹配
据我所知,最短的路仍然是:
doubleIt := func (value int) int {
return value * 2
}
所以它不会变得更短,而且我不认为将函数签名与其主体解耦会更具可读性。声明命名func类型的好处是在其他声明中使用它
由于以下规则,不需要像doubleId:=mapFunc(func…
这样的额外转换:
如果两个函数类型具有相同数量的参数和结果值,则它们是相同的,相应的参数和结果类型是相同的,并且两个函数都是可变的,或者两者都不是。参数名和结果名不需要匹配
当然,您可以
func
是一个类似于任何其他预声明类型的类型,尽管以这种方式声明它没有多大意义:
package main
import "fmt"
// You need not a named argument for a named type
type mapFunc func(int) int
func main() {
doubleIt := mapFunc(func(value int) int { return value * 2})
fmt.Println(doubleIt(2)) // 4
}
这是为了说明函数只是Go中的另一种类型,可以像任何其他命名类型一样对待。当然可以
func
是一种类似于任何其他预声明类型的类型,尽管以这种方式声明它没有多大意义:
package main
import "fmt"
// You need not a named argument for a named type
type mapFunc func(int) int
func main() {
doubleIt := mapFunc(func(value int) int { return value * 2})
fmt.Println(doubleIt(2)) // 4
}
这是为了说明函数只是Go中的另一种类型,可以像对待任何其他命名类型一样对待。使用
mapFunc
包装是多余的,因为规则。当@rfalke将函数声明为命名类型时,他在上下文中询问。他可能有特殊用途。这并不常见,只是为了说明他的观点。由于规则的原因,使用mapFunc
包装是多余的。当@rfalke将函数声明为命名类型时,他在上下文中询问了这个问题。他可能有特殊用途。这并不常见,只是为了说明他的观点。