加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

一篇文章带你清楚Go语言基础之函数

发布时间:2021-11-04 01:53:46 所属栏目:语言 来源:互联网
导读:上次主要回顾上述我们知道,定义一个函数,可以将函数内存分配理解如下。同时我们也知道,无论进行什么操作,只会操作栈上面的值。函数和变量函数名即变量不知道你想过没,定义一个变量,接收一个函数,就像这样。package mainimport fmtfunc say() { fmt.P
上次主要回顾 上述我们知道,定义一个函数,可以将函数内存分配理解如下。       同时我们也知道,无论进行什么操作,只会操作栈上面的值。   函数和变量 函数名即变量 不知道你想过没,定义一个变量,接收一个函数,就像这样。   package main    import "fmt"    func say() {      fmt.Println("say")  }    func main() {      var s1 = say      s1()  }  执行结果如下。       可以发现,通过一个变量接收一个函数名,在通过变量名+括号执行,是没有问题的。   那么,这个变量是什么类型的呢???   fmt.Printf("%Tn",s1)  执行结果       如果我将say函数改一下呢?   func say(s int) int{      fmt.Println("say")      return 1  }  fmt.Printf("%Tn",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))  }  至于上述两个的功能,恕小生不才,至今用到的场景不多。

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!