一、工作区:
其实就是一个对应于特定工程的目录,它应包含3个子目录:src目录、pkg目录和bin目录。
l src目录:用于以代码包的形式组织并保存Go源码文件。(比如:.go .c .h .s等)
l pkg目录:用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件。
l bin目录:与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。
若环境变量GOPATH中包含多个工作区的目录路径,像这样执行go install命令就会失效,此时必须设置环境变量GOBIN。
二、包:
我们创建的的自定义包最好放在GOPATH的src目录下(或者GOPATH src的某个子目录)。
在Go语言中,代码包中的源码文件名可以是任意的。但是,这些任意名称的源码文件都必须以包声明语句作为文件中的第一行,每个包都对应一个独立的名字空间。
package calc
包中成员以名称⾸字母⼤⼩写决定访问权限:
l public: ⾸字母⼤写,可被包外访问
l private: ⾸字母⼩写,仅包内成员可以访问
注意:同一个目录下不能定义不同的package。
三、main包。
init函数(能够应用于所有的package),建议用户在一个package中每个文件只写一个init函数
main函数(只能应用于package main),但package main就必须包含一个main函数.
执行顺序:
1)每个包可以包含任意多个 init 函数,这些函数都会在程序执行开始的时候被调用。所有被编译器发现的 init 函数都会安排在 main 函数之前执行。init 函数用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作。
2)程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。
3)有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。
4)当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。
5)等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。
图片1.png
四,导入包使用关键字import。
一)、import可以是相对路径,也可以是绝对路径。
//方法1
import "fmt"
import "net"
//方法2
import (
"fmt"
"net"
)
二)、包的查找路径。
1)标准库中的包会在安装 Go 的位置找到; 2) Go开发者创建的包会在GOPATH环境变量指定目录里查找。
3)如果编译器查遍 GOPATH 也没有找到要导入的包,那么在试图对程序执行 run 或者 build
的时候就会出错。
三)点操作,别名操作和_操作。
1)点操作:
import (
//这个点操作的含义是这个包导入之后在你调用这个包的函数时,可以省略前缀的包名
. "fmt"
)
func main(){
Println("Hello go!")
}
2)别名操作
import (
io "fmt" //fmt改为io
)
func main(){
io.Println("hello go") //通过io别名调用
}
3)_操作
import (
_"fmt"
)
_操作其实是引入改包,而不直接使用包里面的函数, 而是调用了该包里面的init函数。
©著作权归作者所有:来自51CTO博客作者ck_god的原创作品,如需转载,请注明出处,否则将追究法律责任
Go执行顺序导包流程Golang