重学Golang-函数总结

匿名函数

        匿名函数是指没有名字的函数,使用场景如下:

        1)不带参数的匿名函数

package main
import (
    "fmt"
)

func main(){
    f := func(){
        fmt.Println("不带参数")
    }
    f()
    fmt.Printf("% T\n",f)    
}
输出:
不带参数
func()

        2)带参数的匿名函数

package main
import (
    "fmt"
)

func main(){
    f := func(args string){
        fmt.Println(args)
    }
    f("带参数")
    fmt.Printf("% T\n",f)

    //写法2
    (func(args string){
        fmt.Println(args)
    })("带参数2")

    //写法3
    func(args string){
            fmt.Println(args)
    }("带参数3")
}
输出:
带参数
func(string)
带参数2
带参数3

        3)带返回值的匿名函数

package main
import (
    "fmt"
)

func main(){
    f := func()string{
        return "带返回值"
    }
    fmt.Println(f())

}
输出:
带返回值

        4)返回多个匿名匿名函数的函数

package main
import (
    "fmt"
)


func MultiFunc(a,b int)(func(int)int, func()int){
        f1 := func(c int)int{
                return (a+b)*c
        }

        f2 := func()int{
                return a*b;
        }
        return f1,f2
}
func main(){
    f1,f2 := MultiFunc(2,3)
    fmt.Println(f1(4),f2())

}
输出:
20 6

闭包

        闭包是有函数和与其相关的引用环境组合而成的实体。闭包是从其主体外部引用变量的函数值。函数可以访问并分配给引用的变量,即函数是被“绑定”到了变量上。闭包的实质是函数的嵌套,内层的函数可以使用外层函数的所有变量。

package main

import "fmt"

func Func()func(string)string{
        a := "hello"
        return func(b string)string{
                a += b
                return a
        }
}

func main(){
        a := Func();
        fmt.Println(a("world"))
        fmt.Println(a("shuge"))

}
输出:
helloworld
helloworldshuge

函数可变参数

        Go语言支持可变参数,定义可变参的函数形式如下:

func myFunc(arg ...string){
    for _,v := range arg{
        fmt.Println(v)
    }
}

注意事项

        recover()函数必须要在defer函数中运行

func main(){
    defer func(){
        recover()
    }()
}
多层嵌套、直接调用都无效

        不要在循环中调用defer,但是可以在循环中增加一个局部函数来调用defer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值