go-函数

函数声明

go中函数传参,都是copy传递,即值传递

有名函数

// 有参无返回值
func funcname1(x int, y string){}  // 形参名,形参类型,不可指定默认值
func funcname2(x,y int, z string){}  // 形参类型相同时,可简写
funcname2(1,2,"hello")  // 只能按照位置形参传参,没有关键字传参

// 有参有返回值
func funcname(x int, y string)(s1 int, s2 string){  // 指定返回值类型,返回一个时可不加括号
    // 定义时指定了返回s1,已经完成了变量声明,在函数体中可以直接使用,否则需要主动声明
    s1 = 10  
	s2 = "haha"
    
    // 按照指定的返回形式返回结果,包括顺序,类型,个数
    // 当指定了所有的返回值时,只需要写return即可
    // 当指定的返回值s1没有值时,默认返回它的类型的零值
    return s1,s2  
}
s1,_ := funcname(19,"hei")  //_代表忽略该返回值,是真正的忽略,_不是变量

// 可变长参数
func funcname(x string, y ...int){  // 相当于python中的*args,只能有一个,并且是最后yi'ge
    /*
    x: 接收一个字符串
    y: 接收任意多个int类型数据,存入[]int切片y中
    */
    fmt.Println(y, x)
}

匿名函数(头等函数)

//  即声明函数时,不声明函数名
func (){}

// 要么直接加括号运行
func (){}()

// 要么被变量接收
a := func(){}

函数变量

函数变量的类型

// 函数变量的类型包括函数func关键字,形参类型,返回值类型
func test1(){}  // 类型:func ()
func test2(x int, y string){}  // 类型:func(int,string)
func test3(x int, y string)(z int){}  //类型:func(int,string) int
func test4(x int, y string)(z int, f func()) // 类型:func(int,string)(int, func())

嵌套函数

// 在局部中定义函数只能使用匿名函数,不能使用有名函数,负责会报错
func test(x int, y int)(s int, c string,f func()){
    a := func(){}
    return x+y+1, "ok", a
}

闭包函数

// 闭包函数:定义在函数内部,并且引用了外部的作用域
func test(x int, y int)(s int, c string,f func()){
    a := func(){
        z := x+10
        fmt.Println(z)
    }
    return x+y+1, "ok", a
}
posted @ 2020-03-28 10:27  DongDon  阅读(113)  评论(0)    收藏  举报