Go语言函数

什么是函数

  • 将一些代码进行重用的一种机制
    就是慕课网的老师所用的方法 定义函数func 然后在main函数中使用

  • 函数名不能重名,小写和大写的不一样

例如有需求要计算有未知个数的值的和
代码内有3种不同的计算方法

不定参数


//       参数名 自己起 ... type        有未知数量的数值要求求和
func sum(args...int){
    //sum :=args[0]+args[1]+args[2]+args[3]
    //fmt.Println(args)
    sum:=0
    //for i:=0;i<len(args);i++{
    //  sum+=args[i]
    //
    //}

    for _,r:=range args{
        sum+=r
    }
    fmt.Println(sum)


func main() {
    //参数的传递
    sum(1,2,3,4,10)


}

不定参数放在最后
函数调用,固定参数必须传值,不定参数根据需要决定是否传值


函数的嵌套

  1. 函数嵌套就是一个函数中调用另一个函
  2. 函数嵌套的执行过程
  3. 函数嵌套的调用的应用
  4. 不定参数的调用
//不定参数的传值
func bu1(args... int)  {
    fmt.Println(args)
}
func bu2(args... int)  {
    bu1(args[0:5]...)
    bu1(args[:]...)
    bu1(args...)
}

func main() {
    //函数嵌套就是一个函数中调用另一个函
    //函数嵌套的执行过程
    //函数嵌套的调用的应用
    //不定参数的调用
    bu2(1,2,3,4,5,6,7,8,9)

输出
[1 2 3 4 5]
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6 7 8 9]

函数的返回值

写在func代码的第一个()后,return值回来

func Test(a,b int) (c,d,sum int) {    //可以返回多个值,但都要接受,也可以使用匿名变量
    //a:=1
    //b:=2
    sum=a+b
    return
//不同写法,3种
}
func main() {
    var res int

    var res2 int
    res,_,res2=Test(2,3)
    fmt.Println(res,res2)

}

函数类型

面向对象中用到
内存四区分别为代码区,数据区,堆区,栈区

函数作用域

作用域与作用范围
局部变量

  • 定义在函数内部的变量是局部变量,局部变量的作用域在函数内部有效

  • 不同的函数可以定义相同的局部变量名,互不影响,因为作用域不同

  • 变量先声明再使用,在函数内部,变量名是唯一的
    全局变量

  • 定义在函数外部的变量,全局变量的作用域是在整个文件

  • 全局变量名不能和其他文件中的全部变量名重合
    -全局变量尽量不要和局部变量重名,虽然可以重名

如果全部变量名和局部变量名相同,那么会使用局部变量,就近原则

匿名函数与闭包

package main

import "fmt"
//           匿名函数类型
func test5() func()int {
    var x int
    return func()int{
        x++
        return x
    }

}


func main() {
    //匿名函数就是指没有名字的函数func
    //var num int
    //num = 10
    //func() {
    //  num++
    //  fmt.Println(num)
    //} ()          //去掉13行的f()和9行的f:= 加个()在花括号后也可以调用函数
    ////f()
    //fmt.Println(num)


    ////参数传递
    ////1.
    //func(a,b int){
    //  sum:=a+b
    //  fmt.Println(sum)
    //  }(3,5)

    //匿名参数返回值
    //x,y:=func(a,b int)(max,min int) {
    //  if a>b {
    //      max=a
    //      min=b
    //  }else  {
    //      max=b
    //      min=a
    //  }
    //  return
    //}(64,46)
    //fmt.Println(x,y)

    //闭包
    //匿名函数最主要的功能是实现闭包
    //闭包不关心作用域,只要有闭包还在使用,变量就会存在
    q:=test5()
    fmt.Println(q())
    fmt.Println(q())
    fmt.Println(q())


}
闭包

匿名函数最主要的功能是实现闭包
闭包不关心作用域,只要有闭包还在使用,变量就会存在

递归函数

递归函数就是调用函数本身

递归函数相同的结构
  1. 有跳出条件


    1.PNG

最内的方框结束循环后将a逐次打印出来

100以内的值的递归函数解决fanfare

func onehundred(a int) int {
    if a == 100 {
        return 100
    }
    return a+onehundred(a + 1)
}

func main() {
    fmt.Println(onehundred(0))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 函数是基本的代码块,用于执行一个任务。Go 语言最少有个 main() 函数。函数声明告诉了编译器函数的名称,返回...
    silencefun阅读 461评论 0 0
  • 函数的定义和调用 函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也不能重复...
    kjkongjun阅读 213评论 0 0
  • 5.1 定义格式 函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返...
    小黑胖_阅读 669评论 0 3
  • 函数包含函数名、行参列表、函数体和返回值列表,使用func进行声明,函数无参数或返回值时则形参列表和返回值列表省略...
    imsilence阅读 199评论 0 0
  • 作者:李骁 16.1 函数介绍 Go语言函数基本组成:关键字func、函数名、参数列表、返回值、函数体和返回语句。...
    ffhelicopter阅读 1,679评论 3 6