一篇文章带你清楚Go语言 基础之函数
发布时间:2022-11-30 12:45:14 所属栏目:语言 来源:
导读: 上次主要回顾 上述我们知道,定义一个函数,可以将函数内存分配理解如下。 同时我们也知道,无论进行什么操作,只会操作栈上面的值。 函数和变量 函数名即变量 不知道你想过没,定义一个变量,接收一个函
|
上次主要回顾 上述我们知道,定义一个函数,可以将函数内存分配理解如下。 同时我们也知道,无论进行什么操作,只会操作栈上面的值。 函数和变量 函数名即变量 不知道你想过没,定义一个变量,接收一个函数,就像这样。 package main import "fmt" func say() { fmt.Println("say") } func main() { var s1 = say s1() } 执行结果如下。 可以发现,通过一个变量接收一个函数名,在通过变量名+括号执行,是没有问题的。 那么,这个变量是什么类型的呢??? fmt.Printf("%T\n",s1) 执行结果 如果我将say函数改一下呢? func say(s int) int{ fmt.Println("say") return 1 } fmt.Printf("%T\n",s1) 可以发现,如果函数参数和返回值不一样,打印出来的类型也是不一样的。 定义函数类型 上述我们知道,可以通过变量接收一个函数名。 通过变量接收函数名是没有约束的,不管函数几个参数,几个返回值,都可以接收,真是活出了动态语言的样子。 而定义函数类型就是限制变量接收函数,只能接收指定格式的函数。 主要用到type关键字。 格式 type 变量名 func([参数类型,参数类型]) [返回值类型] 中括号表示可选参数 例如 type a func() type b func(int) type a func(int,int) int 具体代码 package main import "fmt" /* 定义一个函数类型的变量 接收的函数参数必须是两个int类型 函数的返回值也必须是int类型 */ type cType func(int, int) int func say1(a, b int) int { fmt.Println("say",a+b) return 1 } func say2(a, b int) { fmt.Println("say") } func main() { var s1 cType s1 = say1//调用s1其实调用的就是say1 s1(1,1) //var s2 cType //s2 = say2//报错,cannot use say2 (type func(int, int)) as type cType in assignment } 高阶函数 千万不要被这个名字唬住了。 简单点说,高阶函数就是把函数当作参数或者把函数当作返回值。 函数当作参数 package main import "fmt" func add(x int, y int) int { return x + y } func calc(x int, y int, other func(int, int) int) int { return other(x, y) } func main() { //将add函数传入第三个参数 var result = calc(34, 12, add) fmt.Println(result) } 函数当作返回值 package main import "fmt" func add(x int, y int) int { return x + y } func test() (func(int, int) int) { return add } func main() { var a = test() fmt.Println(a(1,2)) } 至于上述两个的功能,恕小生不才,至今用到的场景不多。 (编辑:云计算网_汕头站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330478号