本篇文檔應該是第一篇文檔的補充,筆者還還不是特別瞭解Go的使用的時候就盲目的去做安裝和學習,絕對是一個失敗的案例。。。
對於一般情況,使用Go只需要安裝Go即可,不需要gccgo的安裝,那個真的很慢,而且有一個最大的問題是沒有go的支援。
go是一個有點強大的工具,可以安裝包,測試包,從網上下載並安裝包,還有一些附帶的小工具,objdump什麼的,都很好用。
對於go的使用,可以參照文檔:http://golang.org/doc/code.html
在這裡就不再翻譯了,強調一下go test的使用即可。這個真心強大。
Testing
Go has a lightweight test framework composed of the go test
command and the testing
package.
You write a test by creating a file with a name ending in _test.go
that contains functions named TestXXX
with signaturefunc
(t *testing.T)
. The test framework runs each such function; if the function calls a failure function such as t.Error
ort.Fail
,
the test is considered to have failed.
寫好一個code檔案之後,以檔案名稱+_test.go作為尾碼,在test的檔案中,包含需要測試的包的名字,匯入測試的包。並且按照Test+FunctionName的命名方式命名測試函數。該函數的參數為 t *testing.T。
Add a test to the newmath
package by creating the file $GOPATH/src/example/newmath/sqrt_test.go
containing the following Go code.
package newmathimport "testing"func TestSqrt(t *testing.T) {const in, out = 4, 2if x := Sqrt(in); x != out {t.Errorf("Sqrt(%v) = %v, want %v", in, x, out) }}
Now run the test with go test
:
$ go test example/newmathok example/newmath 0.165s
Run go help test
and see thetesting
package documentation for more detail.
這樣一鍵式測試的功能真的很不錯,能夠保證每一個file,每一個函數的正確性(不從包中匯出的函數無法測試?待確定)。
經過測試,私人函數也是可以測試的:
測試代碼如下:
package newmath import "testing"func TestSqrt(t *testing.T) { const in, out = 4, 2 if x := Sqrt(in); x != out { t.Errorf("Sqrt(%v) = %v, want %v", in, x, out) } }func TestprivateSqrt(t *testing.T){ const in, out = 4, 2 if x := Sqrt(in); x != out { t.Errorf("Sqrt(%v) = %v, want %v", in, x, out) } }
包的代碼如下:
package newmath// Sqrt returns an approximation to the square root of x.func Sqrt(x float64) float64 { return privateSqrt(x); }func privateSqrt(x float64) float64{ // This is a terrible implementation. // Real code should import "math" and use math.Sqrt. z := 0.0 for i := 0; i < 1000; i++ { z -= (z*z - x) / (2 * x) } return z}
要養成良好的習慣,保證每一個檔案都有良好的測試。
Go Go Go