开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :函数注意事项和细节(2)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9602
函数注意事项和细节(2)
函数注意事项和细节讨论
1、在 G0 中,函数也是一种数据类型,(地位与 int,string 相同)可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用。
【案例说明】
新建文件夹 funcdemon05 新建文件 main.go
代码
func getSum(n1 int, n2 int) int {
return n1 + n2
}
func main() {
a:= getSum
fmt.Printf("a的类型%T, getsum类型是%T\n", a, getSum)
//执行结果 a的类型func(int,int)int,getSum类型是
func(int,int)int
res := a(10,40)//等价 res := getSum(10,40)
fmt.Println(“res=”,res)
//执行结果a的类型func(int,int)int,getSum类型是func(int,int)int
res=50
}
2、函数既然是一种数据类型,因此在 Go 中,函数可以作为形参,并且调用
【案例说明】
代码
func getSum(n1 int, n2 int) int {
return n1 + n2
}
func myFun(funvar func(int,int) int, num1 int, num2 int ) {
return funvar(num1, num2)
}
func main() {
a:= getSum
fmt.Printf("a的类型%T, getsum类型是%T\n", a, getSum)
res := a(10,40)//等价 res := getSum(10,40)
fmt.Println(“res=”,res)
//看案例
res2 := myFun(getSum, 50, 60)//去掉冒号应在前面定义 var res2 int
fmt.Println(“res2=”,res2)
}
运行结果
a的类型 func(int,int)int,
getSum类型是 func(int,int)in
res= 50
res2= 110
3、为了简化数据类型定义, Go 支持自定义数据类型
基本语法:
type 自定义数据类型名 数据类型//理解:相当于一个别名
案例:
type mylnt int //这时 mylnt 就等价 int 来使用了.
案例:
type mySum func (int, int) int //这时 mySum 就等价一个函数类型 func (int, int) int
举例说明自定义数据类型使用
案例(1)
func main() {
type myInt int //给int取了别名, 在go中myInt和int虽然都是int类型,但在go中看作两个类型
var num1 myInt
num1 = 40
num2 = int(num1)//这里需要显示转换,num2 =num1会报错,Go语言上二者不是同一类型
fmt.Println(“num1=”,num1,“num2=”,num2)
}
运行效果
num1= 40
案例(2)
func getSum(n1 int, n2 int) int {
return n1 + n2
}
type myFunType func(int, int) int//这时 myFun 就是func(int, int) int类型
func myFun2(funvar myFunType, num1 int, num2 int ) {
return funvar(num1, num2)
}
func main() {
res3 := myFun2(getSum, 500, 600)
fmt.Println(“res3=”,res3)
}
执行结果
res3= 1100
4、支持对函数返回值命名
func cal(n1 int ,n2 int) (sum int , sub int) {
sum = n1 + n2
sub= n1 - n2
return
}
举例:
func getSumAndSub(n1 int,n2 int) (sum int, sub int){
sum = n1 + n2
sub= n1 - n2
return
}
func main() {
a1, b1 := getSumAndSub(1,2)
fmt.Printf(“a=%v b=%v\n”, a1, b1)
}
运行效果
a=3 b=-1