11 Go defer语句 && init()函数

2018-10-30  本文已影响0人  亨锅锅

1、defer语句

package main

import "fmt"

func main() {
    /*
    1.defer语句的格式
    defer 语句

    2.defer语句的作用
    延迟执行, 会在所属函数执行完毕之后再执行
    常用于资源释放, 解锁, 错误处理等等
    以前在C语言中我们说过, 通过malloc申请的存储空间, 一定更要释放free
    但是由于我们不能写完malloc之后立即free,所以经常导致我们忘记释放
    malloc -- >申请存储空间
    ... ... --> 使用存储空间
    free --> 释放存储空间

    注意点:
    如果在同一个函数中编写了多个defer语句, 那么会遵守先进后出的原则
    先注册的defer语句后执行, 后注册的defer语句先执行
     */

     //fmt.Println("申请存储空间")
     //defer fmt.Println("释放存储空间")
     //fmt.Println("使用存储空间")
     //fmt.Println("使用存储空间")
     //fmt.Println("使用存储空间")


     defer fmt.Println("第一条语句")
     defer fmt.Println("第二条语句")
     defer fmt.Println("第三条语句")
     defer fmt.Println("第四条语句")
}

结果

第四条语句
第三条语句
第二条语句
第一条语句

Process finished with exit code 0

2、init()函数

package main

import "fmt"
import "test"

// 2.
const MAX_VALUE  = 666

// 3.
var num int = getNumber()

// 4.
func init()  {
    fmt.Println("init函数1")
}
func init()  {
    fmt.Println("init函数2")
}
// 5.
func main() {
    /*
    1.在Go语言中保留了两个函数, 一个叫做main,另外一个叫做init
    main函数是由系统调用的, init函数也是由系统调用的

    2.init函数的作用:
    对当前文件进行初始化

    3.调用顺序
    main包 --> 常量 --> 全局变量 --> init函数 --> main函数 --> 执行逻辑代码 --> Exit程序

    4.注意点:
    main函数只能在main包中(package main), 并且一个程序只能有一个,
    但是init函数每个包中都可以有, 并且可以有多个(但是企业开发推荐只写一个)
     */
     fmt.Println("main函数")

     test.getValue()
}

func getNumber() int {
    fmt.Println("返回全局变量需要的值")
    return 888
}
上一篇 下一篇

猜你喜欢

热点阅读