Golang- import 導入包的語法

 

一 包的導入語法mysql

     在寫Go代碼的時候常常用到import這個命令用來導入包文件,看到的方式參考以下:git

     import(
         "fmt"
     )github

    而後在代碼裏面能夠經過以下的方式調用sql

      fmt.Println("hello world")函數

   

       上面這個fmt是Go語言的標準庫,他實際上是去GOROOT下去加載該模塊,固然Go的import還支持以下兩種方式來加載本身寫的模塊:url

      相對路徑     import   "./model"  //當前文件同一目錄的model目錄,可是不建議這種方式importstring

      絕對路徑    import   "shorturl/model"  //加載GOPATH/src/shorturl/model模塊it

 

     上面展現了一些import經常使用的幾種方式,可是還有一些特殊的import,讓不少新手很費解,下面是三種導入包的使用方法。編譯


      1. 點操做   有時候會看到以下的方式導入包     import( . 「fmt」 ) 
這個點操做的含義就是這個包導入以後在你調用這個包的函數時,你能夠省略前綴的包名,也就是前面你調用的fmt.Println(「hello world」)  能夠省略的寫成Println(「hello world」)
      2. 別名操做   別名操做顧名思義能夠把包命名成另外一個用起來容易記憶的名字
           import( f 「fmt」 )   別名操做調用包函數時前綴變成了重命名的前綴,即f.Println(「hello world」)
      3.  _操做   這個操做常常是讓不少人費解的一個操做符,請看下面這個import
          import ( 「database/sql」 _ 「github.com/ziutek/mymysql/godrv」 ) 

        _操做其實只是引入該包。當導入一個包時,它全部的init()函數就會被執行,但有些時候並不是真的須要使用這些包,僅僅是但願它的init()函數被執 行而已。這個時候就可使用_操做引用該包了。即便用_操做引用包是沒法經過包名來調用包中的導出函數,而是隻是爲了簡單的調用其init函數()。import

 

二 包的導入過程說明

        程序的初始化和執行都起始於main包。若是main包還導入了其它的包,那麼就會在編譯時將它們依次導入。有時一個包會被多個包同時導入,那麼它只會被 導入一次(例如不少包可能都會用到fmt包,但它只會被導入一次,由於沒有必要導入屢次)。當一個包被導入時,若是該包還導入了其它的包,那麼會先將其它 包導入進來,而後再對這些包中的包級常量和變量進行初始化,接着執行init函數(若是有的話),依次類推。等全部被導入的包都加載完畢了,就會開始對 main包中的包級常量和變量進行初始化,而後執行main包中的init函數(若是存在的話),最後執行main函數。下圖詳細地解釋了整個執行過程:

 

 

通 過上面的介紹咱們瞭解了import的時候實際上是執行了該包裏面的init函數,初始化了裏面的變量,_操做只是說該包引入了,只初始化裏面的init函 數和一些變量,不能經過包名來調用其它的函數,這有什麼用呢?每每這些init函數裏面是註冊本身包裏面的引擎,讓外部能夠方便的使用,就不少實現 database/sql的引發,在init函數裏面都是調用了sql.Register(name string, driver driver.Driver)註冊本身,而後外部就可使用了。

相關文章
相關標籤/搜索