Go語言學習筆記(六) [包]

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。日期:2014年7月30日
1、定義:包時函數和資料的集合。使用package關鍵字定義一個包,檔案名稱不需要與包名一致,包名約定使用小寫字元,Go包可以由多個檔案組成,但是需要使用相同的package<name>,包中方法的調用方式:<packag>.Fuction()
現在建立一個檔案even.go,even.go的檔案內容如下:package even//判斷是否是偶數func Even(i int) bool {   return i % 2 == 0}//判斷是否是奇數func odd(i int) bool { return i % 2 == 1}
裡面定義了兩個函數,一個是Even,一個是odd,Even首字母大寫,odd首字母小寫,Even函數可以在包外訪問,而odd函數不可以,這是Go語言的約定——公有函數的名字以大寫字母開頭,私人函數的名字以小寫字母開頭。這種規則同樣適用於定義在包中的新類型、全域變數等,而且"大寫"的含義並不僅限於US ASCII,它被擴充到了所有的大小寫字母表(拉丁文、希臘文、斯拉夫 文、亞美尼亞文和埃及古文)。
構建even包://列印GOPATH路徑,注意GOPATH路徑時在GO語言環境安裝的時候設定的$ echo $GOPATH  E:\ProgramFiles\Go\Go\GoImportPkg//在GOPATH下面建立檔案夾/src/even$ mkdir $GOPATH/src/even//把even.go檔案拷貝到建立的目錄下面$ cp even.go $GOPATH/src/even//跳轉到建立的目錄cd $GOPATH/src/even//列印目前的目錄資訊$ pwd/e/ProgramFiles/Go/Go/GoImportPkg/src/even//編譯even.gogo bulid //安裝even包go install
執行上述步驟之後,到$GOPATH/pkg目錄下可以找到一個檔案even.a,用Sublime開啟查看:213c 6172 6368 3e0a 5f5f 2e53 594d 44454620 2020 2020 2020 3020 2020 2020 20202020 2020 3020 2020 2020 3020 2020 20203634 3420 2020 2020 3133 3620 2020 20202020 600a 54e0 0100 0022 222e 4576 656e0044 e001 0000 676f 2e73 7472 696e 672e2266 756e 6328 696e 7429 2062 6f6f 6c220044 e001 0000 7479 7065 2e66 756e 6328......
使用even包:package mainimport ( "even" //匯入我們剛才自訂的even包 "fmt" //GO內建包)func main() { i := 5 fmt.Printf("Is %d even? %v\n", i, even.Even(i)) //列印 Is 5 even? false //fmt.Printf("Is %d even? %v\n", i, even.odd(i)) //報錯  提示 cannot refer to unexported name even.odd}
2、包名覆蓋:Go在匯入包的時候,可以通過import <othername> packagenaem方式來覆蓋原始的包名,且覆蓋之後只能使用新的名稱來調用包中的函數。
3、包的文檔:每個包都應該有包注釋,在 package 前的一個註解區塊。對於多檔案包,包注釋只需要 出現在一個檔案前,任意一個檔案都可以。包注釋應當對包進行介紹,並提供相關於包的整體資訊。這會出現在 go doc 產生的關於包的頁面上,並且相關的細節會一併顯示。在包中每個定義(並且匯出)的函數應當有一小段文字描述該函數的行為。
4、單元測試    在Go中為包編寫單元測試應當是一種習慣。編寫測試需要包含 testing 包和程式 go test。測試檔案也在包目錄中,被命名為*_test.go,這些測試檔案和其它的Go檔案都是一樣的,但是go test只會執行測試函數,每個測試函數都有相同的標識,名字均以Test開頭,定義方式為:func TestXxx(t *testing.T)。編寫測試時,需要告訴 go test 測試是失敗還是成功。測試成功則直接返回。當測試失敗可以用Fail()、FailNow、Log、Fatal等函數標記 。    樣本:    建立一個even_test.go檔案(Go中單元測試檔案的名稱都約定為XXX_test.go),該檔案與上述even.go檔案在相同的目錄下,內容如下:    package even    import "testing"    func TestEven(t *testing.T) {    if !Even(2) {          t.Log("2 should be even!")          t.Fail()         }    }
使用了package even定義包,測試使用與被測試的包使用相同的名字空間,這 不僅僅是為了方便,也允許了測試未匯出的函數和結構(同包下的私人函數是可以直接存取的)。
匯入了testing包,定義測試函數TestEven,函數體中編寫了一些測試規則。
此時:執行go test    說明測試通過。
修改even_test.go檔案內容,再次執行go test  package even    import "testing"    func TestEven(t *testing.T) {    if Even(2) {  //去掉了!          t.Log("2 should be even!")          t.Fail()         }    } 由此可以來驗證封裝中函數的文法規則是否正確。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.