函数

函数基础部分

语法:func关键字 函数名(参数1 类型,参数2 类型) (返回值类型){ }{  }之间的代码,就是函数体。

1.无参数,无返回值

package main

import "fmt"

func test()  {
    fmt.Println("xxx")      # 表示这个函数不需要输入参数,且没有返回值
}

2.有两个int类型的参数

package main

import "fmt"

func main() {
    test(a:1, b:2)    # 只需要输入1,2便会自动补全

}

func test(a int, b int) {
    fmt.Println(a + b)
}

3.有一个数字类型返回值,一定要指定返回值类型

package main
import "fmt" func main(){ c := test(1,2) fmt.Println(c) } // func test(a,b int) int { // return a+b func test(a,b int) string { return "laji" }

4.返回多个值

package main
import "fmt" func main(){ //a,b := test(1,2) // 有两个返回值 //fmt.Println(a,b) a,_ := test(2,2) // 不要第二个返回值 ,'_'在python中是个变量,在go中表示空 fmt.Println(a) } func test(a,b int) (int, string) { return a+b, "成功" }

5.在go中没有位置参数和关键字参数,都是位置参数,也没有默认参数

package main
import "fmt" func main(){ c := test(2,3) fmt.Println(c) } func test(a,b int) int { return a+b }

6.不定长参数

package main
import "fmt" func main(){ fmt.Println(1,2,3,4,5,6) } func test(a interface{}) { fmt.Println(a) }

 函数高级部分

1.内层函数

  内层函数:定义在函数内部的函数。go中函数内部定义的函数是不能有名的,需要定义匿名函数:没有名字

package main
import "fmt" func main() { test(1) } func test(a int) { func() { fmt.Println("我是内层函数") }() }

2.闭包函数

  定义:在函数内部,对外部作用有引用。

package main
import "fmt" func test(a int) (func()){ b := func() { fmt.Println(a) fmt.Println("我是闭包函数") } return b }
func main() { c :
= test(3) // 加括号,是为了不直接return返回 b c() }

3.定义一个函数,传入函数,返回函数

package main
import "fmt" func test(a func()) func() { b := func(){ fmt.Println("我先执行") a() fmt.Println("函数执行完") } return b } func test2() { fmt.Println("hello") } func main() { a := test2 a = test(a) a() }

 4.给类型命别名

package main
import "fmt" type MyFunc func(a int,b int) func() type MyInt int func test() MyFunc { c:= func(a int,b int) func(){ return func() { } } return c } func main() { var a MyInt = 10 fmt.Println(a) }
原文地址:https://www.cnblogs.com/blue-tea/p/12013866.html