函数注意事项和细节(2) | 学习笔记

简介: 简介:快速学习函数注意事项和细节(2)

开发者学堂课程【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

相关文章
|
编译器 Scala 开发者
函数使用注意事项和细节2|学习笔记
快速学习函数使用注意事项和细节2。
|
Scala 开发者
包对象注意事项和细节说明|学习笔记
快速学习包对象注意事项和细节说明。
包对象注意事项和细节说明|学习笔记
|
存储 程序员 Go
切片注意事项和细节(2) | 学习笔记
简介:快速学习切片注意事项和细节(2)
148 0
切片注意事项和细节(2) | 学习笔记
|
Go 开发者
切片注意事项和细节(1) | 学习笔记
简介:快速学习切片注意事项和细节(1)
134 0
切片注意事项和细节(1) | 学习笔记
|
Go vr&ar 开发者
切片注意事项和细节(3) | 学习笔记
简介:快速学习切片注意事项和细节(3)
切片注意事项和细节(3) | 学习笔记
|
网络协议 程序员 测试技术
管道的注意事项和细节(2)|学习笔记
快速学习管道的注意事项和细节(2),使用 select 可以解决从管道取数据的阻塞问题【案例演示】 我们在管道读取数据的时候要 close 管道,如果没有关闭,这个时候他会阻塞,而且会发生死锁,但有些情况如想在不想关闭的情况下也不被阻塞的话,我们就要使用 select
管道的注意事项和细节(2)|学习笔记
|
Go vr&ar 开发者
数组注意事项和细节(2)|学习笔记
快速学习数组注意事项和细节(2)。
141 0
数组注意事项和细节(2)|学习笔记
|
Java 编译器 Scala
函数使用注意事项和细节3|学习笔记
快速学习函数使用注意事项和细节3。
|
Java 编译器 Scala
函数使用注意事项和细节1|学习笔记
快速学习函数使用注意事项和细节1。
|
Go 开发者
函数注意事项和细节(1) | 学习笔记
简介:快速学习函数注意事项和细节(1)