golang工作区
工作區(qū)介紹
go代碼必須放在工作區(qū).包含3個(gè)只目錄:src目錄, pkg目錄, bin目錄
- src目錄: 以代碼包的形式組織并保存go源碼文件(比如: .go .c .h .s)等
- pkg目錄: 用于存放有g(shù)o install命令構(gòu)建安裝后的代碼包(包含go庫(kù)源碼文件)的.a歸檔文件
- bin目錄: 與pkg類似.通過go install命令安裝完成后,保存由go命令源碼文件生成的可執(zhí)行文件
注意: 當(dāng)環(huán)境變量GOPATH中只包含一個(gè)工作區(qū)的目錄路徑時(shí),go install命令才會(huì)把命令源碼安裝到當(dāng)前工作區(qū)的bin目錄下.若環(huán)境變量GOPATH中包含多個(gè)工作區(qū)的目錄路徑,像執(zhí)行g(shù)o install命令就會(huì)失效.此時(shí)必須設(shè)置環(huán)境變量GOBIN
GOPATH設(shè)置
為了能夠構(gòu)建這個(gè)工程,需要把所需工程的根目錄加入到環(huán)境變量GOPATH中.否則即使處于同一工作目錄(工作區(qū)),代碼之間也無(wú)法通過絕對(duì)代碼包路徑完成調(diào)用
在實(shí)際開發(fā)中,工作目錄往往是多個(gè).這些工作目錄的目錄路徑需要添加至GOPATH.當(dāng)有多個(gè)目錄時(shí),請(qǐng)注意分割符,多個(gè)目錄的時(shí)候windows是分號(hào),linux是冒號(hào),當(dāng)有多個(gè)GOPATH時(shí),默認(rèn)會(huì)將go get的內(nèi)容放在第一個(gè)目錄下
調(diào)用函數(shù)無(wú)需包名
import . "fmt"func main() {Println("aaaaa") }起別名
import io "fmt"func main() {//fmt的別名是ioio.Println("aaaaa") }_操作
用戶可能需要導(dǎo)入一個(gè)包,但是不需要引用這個(gè)包的標(biāo)識(shí)符.在這種情況下,可以使用空白標(biāo)識(shí)符_來重命名這個(gè)導(dǎo)入
import (_ "fmt" )_操作其實(shí)是引入該包,而不直接使用包里面的函數(shù),而是調(diào)用了該包里面的init函數(shù)
main函數(shù)和init函數(shù)
go里面有2個(gè)保留函數(shù): init(只能應(yīng)用于package)和main(只能應(yīng)用于package main).這兩個(gè)函數(shù)在定義時(shí)不能有任何的參數(shù)和返回值.雖然一個(gè)package里面可以寫任意多個(gè)init函數(shù),但這無(wú)論是對(duì)于可讀性和可維護(hù)性都不建議
go會(huì)自動(dòng)調(diào)用main和init,所以你不需要在任何地方調(diào)用這兩個(gè)函數(shù).每個(gè)package中的init函數(shù)都是可選的,但package main就必須包含一個(gè)main函數(shù)
每個(gè)包可以包含任意多個(gè)init函數(shù),這些函數(shù)都會(huì)在程序執(zhí)行開始的時(shí)候被調(diào)用.所有被編譯器發(fā)現(xiàn)的init函數(shù)都會(huì)安排在main函數(shù)之前執(zhí)行.init函數(shù)用在設(shè)置包,初始化變量和其他要在程序運(yùn)行前優(yōu)先完成的引導(dǎo)工作
程序的初始化和執(zhí)行都起始于main包,如果main包還導(dǎo)入了其他的包,那么就在編譯的時(shí)候依次將他們導(dǎo)入
有時(shí)候一個(gè)包被多個(gè)包導(dǎo)入,那么他只會(huì)被導(dǎo)入一次
當(dāng)一個(gè)包被導(dǎo)入時(shí),如果該包還導(dǎo)入了其他的包,那么會(huì)先將其他包導(dǎo)入進(jìn)來,然后再對(duì)這些包級(jí)常量和變量進(jìn)行初始化,接著執(zhí)行init函數(shù)(如果有的話)
等所有被導(dǎo)入的包都加載完畢了,就會(huì)開始懟main包的包級(jí)常量和變量進(jìn)行初始化,然后執(zhí)行main包中的init函數(shù)(如果存在的話),最后執(zhí)行main函數(shù)
總結(jié)
- 上一篇: golang中的闭包
- 下一篇: golang中的指针