golang筆記——包

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

1、包簡述

  GO本身沒有項目的概念,只有包,包括可執行包和不可執行包,而不管什麼包,都應該包含在 $GOPATH/src 目錄下,GO命令和編譯器會在 $GOPATH/src 目錄下搜尋相應的包。比如 import "logging" 則會在所有設定的 $GOPATH/src 下去尋找相應包,而不僅僅是當前項目中。

 

2、包聲明

  在每一個代碼檔案中,都需要使用 package 命令來聲明包名,所以在GO語言中,代碼檔案屬於哪個包與檔案目錄結構沒有必然聯絡,但習慣上我們會設定成跟目錄結構相同。帶來的問題就是當想修改檔案夾名的時候,會想去修改該檔案夾中所有代碼中的聲明的包名。

  注意,命令源碼檔案,即 main 函數所在的包,必須聲明為 main 包。

 

3、包匯入

  通過 import 命令來匯入包,尋找的範圍就是簡述裡說的 $GOPATH/src 定義的路徑。代碼中使用某外包的函數時,需要使用 "最後一個包名.函數名" 的方式,所以如果匯入如下情況時,在使用上就會出現問題:

import (    "json"    "my/json")

  那我們需要給包名起個不同的別名,如:

import (    . "json"    myjson "my/json")

  這樣就可以使用 myjson.function() 來調用 my/json 中的函數,而別名為 . 時,表示可以不使用包名首碼直接使用包中的函數,如 json 包裡有一個 to_json() ,則可以直接使用。

  注意,從這裡也可以看出來,同一個包中的不同代碼檔案,其函數名是不能重複的。

 

4、包初始化

  GO語言編譯非常嚴格,如果引入一個包,卻沒有使用它,就會編譯報錯。但在開發調試過程中,這樣就會顯得非常麻煩,我們可以在匯入包前加上 _ ,就可以使編譯通過。其實,該方法的真正作用是初始化該包,執行該包中的 init() 方法。比如我們封裝了一個DB操作,我們可以把串連資料庫的操作放在 init 函數中,然後在啟動服務的代碼檔案中通過 _ 的方法引入該包,就可以自動執行其 init 函數,且通過編譯了。

  注意,如果包中的多個代碼檔案都有 init 函數,則都會執行,但執行順序是不可預期的。

 

 

 

 

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.