[TOC] # 工作区介绍 go代码必须放在工作区.包含3个只目录:src目录, pkg目录, bin目录 * src目录: 以代码包的形式组织并保存go源码文件(比如: .go .c .h .s)等 * pkg目录: 用于存放有go install命令构建安装后的代码包(包含go库源码文件)的.a归档文件 * bin目录: 与pkg类似.通过go install命令安装完成后,保存由go命令源码文件生成的可执行文件 注意: 当环境变量GOPATH中只包含一个工作区的目录路径时,go install命令才会把命令源码安装到当前工作区的bin目录下.**若环境变量GOPATH中包含多个工作区的目录路径,像执行go install命令就会失效.此时必须设置环境变量GOBIN** # GOPATH设置 为了能够构建这个工程,需要把所需工程的根目录加入到环境变量GOPATH中.否则即使处于同一工作目录(工作区),代码之间也无法通过绝对代码包路径完成调用 在实际开发中,工作目录往往是多个.这些工作目录的目录路径需要添加至GOPATH.当有多个目录时,请注意分割符,多个目录的时候windows是分号,linux是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下 # 调用函数无需包名 ~~~ import . "fmt" func main() { Println("aaaaa") } ~~~ # 起别名 ~~~ import io "fmt" func main() { //fmt的别名是io io.Println("aaaaa") } ~~~ # `_`操作 用户可能需要导入一个包,但是不需要引用这个包的标识符.在这种情况下,可以使用空白标识符_来重命名这个导入 ~~~ import ( _ "fmt" ) ~~~ `_`操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数 # main函数和init函数 go里面有2个保留函数: init(只能应用于package)和main(只能应用于package main).这两个函数在定义时不能有任何的参数和返回值.虽然一个package里面可以写任意多个init函数,但这无论是对于可读性和可维护性都不建议 go会自动调用main和init,所以你不需要在任何地方调用这两个函数.每个package中的init函数都是可选的,但package main就必须包含一个main函数 每个包可以包含任意多个init函数,这些函数都会在程序执行开始的时候被调用.所有被编译器发现的init函数都会安排在main函数之前执行.init函数用在设置包,初始化变量和其他要在程序运行前优先完成的引导工作 程序的初始化和执行都起始于main包,如果main包还导入了其他的包,那么就在编译的时候依次将他们导入 有时候一个包被多个包导入,那么他只会被导入一次 当一个包被导入时,如果该包还导入了其他的包,那么会先将其他包导入进来,然后再对这些包级常量和变量进行初始化,接着执行init函数(如果有的话) 等所有被导入的包都加载完毕了,就会开始怼main包的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数