defer 关键字
- 函数执行结束前被调用
- 作用域只有一排,不能使用
defer {}
来扩充作用域 defer
定义的语句遵循先进后出的规则- 它会按照代码顺序执行关键词修饰的语句(被修饰的代码中的变量状态会被保存),但不调用。直到函数执行结束后再被调用。(也就是说报错后的代码不会被调用,即使有
defer
修饰) - 例子1:
例子2:
- 当然如果都被
defer
修饰就可以被调用。例子:
获取命令行参数
可以通过args := os.Args
来获取命令行参数,类型为字符串切片
变量
- 局部变量和全局变量在不同作用域下变量名允许取一样的
- 变量使用规则为就近原则
- 最好不要起一样名字的变量,避免混淆
局部变量
- 作用域仅在
{}
中,或者if
、for
的声明的循环体中
全局变量
- 不能使用
:=
来初始化,只能使用最原始的方法。例如:var a int
或者const A int
工程管理
- 源文件必须放在src目录中
- 设置GOPATH环境变量、GOBIN环境变量
- 同一个目录包名必须一样
- 同一个目录调用别的文件的函数,直接调用即可,无需包名引用
- 调用不同包的函数为
包名.函数名()
- 如果不同包的函数名字为小写,说明是本包函数;大写为全局函数
导入包
//给包起别名(个人感觉没意义)可能方便给很长的包起别名
import io "fmt"
//忽略该包(个人感觉没意义)
import _ "fmt"
//常用方法(个人感觉没意义)
import (
"fmt"
"os"
)
init()函数
首先需要了解go语言的执行顺序逻辑
- 当引入包时如果那个包也同时引入了另外个包就会先去调用另外那个包的代码,当全局常量、变量实例化、初始化结束后会首先执行包中的init函数,详细执行顺序如上图
//该操作的目的不是为了调用那个包中的函数,而是为了调用包中的init()函数
import (
_ "fmt"
)