函数类型分为函数字面量与函数命名类型
函数字面量类型
表达式: func (输入参数表) 输出参数表。有名函数与匿名函数都属于函数字面量。 函数签名就是有名函数的字面量类型,不包括函数名
函数命名类型
格式: type NewFunctype Funcliteral
NewFunctype 是新定义的函数命名类型,FuncLiteral为函数字面量类型
函数声明
Go语言没有C语言中的函数声明语义
//函数声明 = 函数名 + 函数签名
//函数签名
func (InputTypelist) OutputTypeList
//函数声明
func FuncName (Input) Output
##示例
//有名函数定义, 函数名
//add函数字面量类型 func (int, int) int
func add(a, b int) int{
return a+b
}
//函数声明
func add(int, int) int //实际不用
//add 函数的签名
func (int, int) int
//匿名函数不能独立存在,常作为函数参数,返回值或者赋值给某个变量
//匿名函数可以直接显式初始化
//匿名函数的类型也可以是函数字面量类型 func (int, int) int
func (a,b int) int{
return a + b
}
//函数命名类型
type ADD func(int, int) int
//add 与 ADD底层类型相同, 并且 add是字面量类型
//所以 add可以直接复制给ADD类型的变量
var g ADD := add
func main(){
f := func (a, b int) int{
return a+b
}
g(1,2) //g 是 main.ADD类型
f(1,2) //f 是 func(int, int) int
//但两者的底层类型相同 所以是可以相互赋值的
}