函数基本组成func 函数名 (请求参数) (返回值){函数体}.

声明函数

普通声明函数

func blog(){
    fmt.Print("hello")
}

带参数声明函数

相同类型的变量写法

// 传入是那个类型为int的值
func blogA (int,int,int){
    fmt.Print("ok")  
}
// 参数都a,b 都为int类型
func blogB(a,b,c int){
    fmt.Print(a,b)
}

不同类型的写法

// 参数都a(int 类型),b(string类型) 
func blogC(a int,b string){
    fmt.Print(a,b)
}

带返回值声明函数

// 返回参数类型为string
func video() string {
    return "QvBiLam"
}
// 返回类型为int和string
func videoA() (int,string) {
    return 6,"QvBiLam"
}
// 返回变量
func videoB() (code int,msg string) {
    code = 0
    msg = "ok"
    return 
      // 为了方便阅读建议写成 return code,msg 或 return 值1,值2
}

调用函数

直接调用

func setValue(int,string)(string,string){
    return "hello","QvBiLam"
}

// 调用setValue函数
setValue(3,"oK")

调用并接受返回值

全部接受返回值

func setValue(int,string)(string,string){
    return "hello","QvBiLam"
}

// 调用setValue函数
code,msg := setValue(3,"oK")

接受部分换回值 :在go中声明的变量必须要使用才可以,当接受的函数有两个返回值时候,只有其中一个值是有用的而另一个值没用的情况下可已使用_来忽略变量.

/*
    必传参数为int,string类型
    返回值为2个string类型
*/
func setValue(int,string)(string,string){
    return "hello","QvBiLam"
}

// 不需要传参,可以没有返回值的函数
func getValue(){
    // 声明两个变量接受setValue的返回值
    say,name := setValue(1,"A")
    // 如果值想获取其中一个返回值可以使用 `_` 来忽略变量
    _,name2 := setValue(2,"B")
    fmt.Println(say,name)
    fmt.Println(name2)
}

闭包函数

  首先要理解闭包函数.func 方法名()func()返回类型.解释就是func 方法名的返回值是一个函数func() int.而这个返回函数类型的返回值是int.

示例

  第一步创建自增闭包函数,功能为:计算从0开始自增1的结果并返回.第二部修改自增闭包函数.传入底数s(从几开始进行自增).闭包方法内传入自增值i.结果为s开始自增i.并返回结果.

1-1 创建闭包函数

// 计算自增
func Increment() func() int {
    s := 0
    return func() int{
        s += 1
        return s
    }
}

1-2 调用闭包函数

func main() {
    // 声明变量值为闭包函数
    add := Increment()
    // 调用3次结果为1,2,3
    fmt.Println(add())
    fmt.Println(add())
    fmt.Println(add())

    // 声明新变量为闭包函数
    add1 := Increment()
    // 调用3次记过为1,2
    fmt.Println(add1())
    fmt.Println(add1())
}

2-1 修改闭包函数

// 计算自增
func Increment(s int) func(i int) int {
    return func(i int) int {
        s += i
        return s
    }
}

2-2 修改调用闭包函数

func main() {
    // 声明变量值为闭包函数
    s1,i1:= 0,2
    add := Increment(s1)
    // 调用3次结果为2,4,6
    fmt.Println(add(i1))
    fmt.Println(add(i1))
    fmt.Println(add(i1))

    // 声明新变量为闭包函数
    s2,i2:= 10,5
    add1 := Increment(s2)
    // 调用3次记过为15,20
    fmt.Println(add1(i2))
    fmt.Println(add1(i2))
}
Last modification:March 27th, 2020 at 12:24 pm