包管理
包管理是golang大型工程開發的基礎,golang的一個完整的工程應該分爲3個模塊,分別是:
- src:所有的源代碼,必須自己組織創建
- pkg:源代碼編譯成的二進制的包,自動生成
- bin:最終的可執行程序,自動生成。main函數所在的那個文件的包。
golang有兩個路徑,名稱和作用分別是:
- GOROOT:golang安裝的位置,這是安裝的時候自動添加的,類Unix系統下通過
export $GOROOT
查看 - GOPATH:這是需要自己配置的,是當前工程所在的目錄,配置這個路徑的作用是爲了更好的使用go的包管理工具。每次開啓開發的時候,使用
export
配置。以該項目爲例子,終端輸入export GOPATH=~/code/GoProject && source ~/.bashrc
先給出源代碼結構:
Golang有個特點,每次開發一個包的文件時,最好都寫上測試用例,直接開發測試一起進行;當然,這不是必須的。
每個文件的內容如下:
add.go
package simplemath
func Add(a, b int) int {
return a + b
}
add_test.go
package simplemath
import "testing"
func TestAdd1(t *testing.T) {
r := Add(1, 2)
if r != 3 {
t.Errorf("Add(1, 2) failed. Got %d, expected 3", r)
}
}
sqrt.go
package simplemath
import "math"
func Sqrt(x int) int {
i := math.Sqrt(float64(x))
return int(i)
}
sqrt_test.go
package simplemath
import "testing"
func TestSqrt1(t *testing.T) {
v := Sqrt(16)
if v != 4 {
t.Errorf("Sqrt(16) failed. Got %v, expected 4", v)
}
}
之後轉到src
目錄下,執行:
go install simplemath
go install calc.go
最終的代碼結構:
代碼格式化
golang本身對格式化要求就非常嚴格,但是爲了更方便,添加了格式化工具。比如要對simplemath包的源代碼進行格式化,直接執行:
go fmt simplemath
代碼測試
golang的特點是可以寫代碼與測試同時進行,每個文文件名稱後面添加_test
表示對應的測試文件。比如上述的add_test.go
就是add.go
的測試文件。以包爲單位進行測試。比如測試整個simplemath包,轉到src目錄下,執行:
go test simplemath
測試結果輸出:
ok simplemath (cached)
(cached)
是之前測試過,第一次測試會出現測試時間。
說明文檔
golang的另一個巨大的優勢在於,可以直接在編碼的時候,集成說明文檔。而且說明文檔可以像官網的文檔那樣規範美觀,並直接在瀏覽器中閱讀。
新建以工程,src新建一個FOO包,然後新建foo.go函數,之後文件中添加:
v// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
/*
這個包用於展示文檔說明。整個文檔的說明必須緊貼着package
換行的話需要另起一行,下面可以添加BUG的說明
*/
package FOO
import "fmt"
// this is a function note
// function print Hello, World!
func foo(){
fmt.Println("Hello, World!")
}
// BUG(jack): #1: I'm sorry but this code has an issue to be solved.
// BUG(tom): #2: An issue assigned to another person.
然後
go install FOO
go doc FOO