玩转Go语言之特殊的语法

401 阅读2分钟

defer 语句

这玩意基本没啥作用,就是在一个函数中如果某行代码前面有defer 关键字的话,这行代码就最后执行,如果有多个defer语句的话,遵循后进先出的原则

例如:

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

简化代码作用:

func ReadWrite() bool {

    file.Open("file")
    defer file.Close
    if failureX {
     // file.Close()
      retrun false  
    }

    if failureY {
        //file.Close()
        return false
    }
    
    //file.Close
    return true
}

总结:

1.defer语句的格式

defer 语句

2.defer语句的作用

延迟执行, 会在所属函数执行完毕之后再执行

常用于资源释放, 解锁, 错误处理等等

以前在C语言中我们说过, 通过malloc申请的存储空间, 一定更要释放free

但是由于我们不能写完malloc之后立即free,所以经常导致我们忘记释放

malloc -- >申请存储空间

... ... --> 使用存储空间

free --> 释放存储空间

注意点:

如果在同一个函数中编写了多个defer语句, 那么会遵守先进后出的原则

先注册的defer语句后执行, 后注册的defer语句先执行

init()函数

 1.在Go语言中保留了两个函数, 一个叫做main,另外一个叫做init

main函数是由系统调用的, init函数也是由系统调用的

2.init函数的作用:

对当前文件进行初始化

3.调用顺序

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

4.注意点:

main函数只能在main包中(package main), 并且一个程序只能有一个,
但是init函数每个包中都可以有, 并且可以有多个(但是企业开发推荐只写一个)


上图是每个包中初始化的先后顺序

import几种形式

1.点操作

import{

. "fmt"

}

func main {

Println("点操作")

}

2.起别名

import{

f "fmt"

}

func main {

f.Println("起别名")

}

3._操作

只是调用包的init函数,不调用其他函数

import{

_ "test"

}