匿名函数

f := func(x , y , int ) int {
	return x + y
}

例如:

package main
import "fmt"

func main(){
    f :=func (x , y int) int {
        return x + y
    }
    fmt.Println(f(2,3))
}

Go语言的小特性

defer

file.Open("file")

defer file.Close()
就算出现异常,也会defer操作关闭文件,实现安全编程的目的。

defer 用来进行资源的关闭

package main
import "fmt"

func main(){
    for i :=1 ; i <= 5 ; i ++{
        defer fmt.Println(i)
    }
    fmt.Println("before defer")
}

输出结果:

before defer
5
4
3
2
1

进程 已完成,退出代码为 0
先defer 的后执行

例子二:

package main
import "fmt"
func main(){
    defer func(){
        fmt.Println("After defer")
    }()                                //defer 加函数体加执行函数的一个括号表示
    
    f := func(){                      //上面的和这第二个等价
        fmt.Println("After defer 2")
    }
    defer f()
    
    fmt.Println("before defer")
}

此时输出结果:

before defer
After defer 2
After defer            //先defer 的后执行

Golang中捕获异常

panic 和 Recover(go的异常处理机制)

package main
import "fmt"

func main(){
    defer func(){
        fmt.Println("After defer")
    }()
    
    panic ("i am wrong~!")
    
    fmt.Println("before defer")
}

输出结果:

After defer
panic: i am wrong~!

goroutine 1 [running]:
main.main()
	C:/Users/yesai/IdeaProjects/12/12.go:96 +0x49

进程 已完成,退出代码为 2

先执行第一个函数,显示“After defer”

然后抛出panic 异常,

下面一句“before defer”,不执行。

Recover是从异常中恢复。

函数也可以作为值、类型(type)

type typeName func(input1 inputType1,input2 inputType2[, ...]])
(result1 resultType1[, ...])

相当于C语言中的typedef。

函数的一种高级用法。

package main 
import "fmt"

func main(){
    type sum func(x , y int) int
    var f sum = func (x , y int) int{
        return x + y
    }
    
    fmt.Println(f(3,4))
}

返回7。