Go Development Toolbox
這次去北京參加 RubyConfChina 2013 的來回飛機上,寫完了一個練習用的小專案:gosnake,很明顯就是用 Go 寫的貪食蛇。會挑貪食蛇來練習,是因為之前在 iOS Dev Bootcamp 參加 zonble 的 workshop,題目就是寫一個貪食蛇,覺得這個題目拿來練習真的是挺不錯的。
先來看看動起來的樣子:
程式本身很簡單,沒什麼好說的,倒是想紀錄一些開發上使用到的工具。
開發環境
首先我們都知道 Go 有所謂的 GOPATH
,src, pkg 等等東西都會安裝在這裡。不過每個專案都有自己的套件相依性,再加上如果東西一直裝,這個目錄會很大一包。所以一般建議會在開發專案時,把 GOPATH
設定到專案目錄底下,以免互相污染。c9s 有寫了一個 script goenv 來簡化這個步驟,我使用的則是我 fork 的版本。
使用的方式很簡單,要開發這個專案的時候,切到專案目錄下 source goenv
即可。你的專案目錄下會建立一個 go
目錄,並且 GOPATH
會被指向此處。
套件管理
goenv 其實已經可以解決大部分的問題,如果把 go
目錄也直接 commit 進去的話其實就可以解決 reproducible build 的問題。不過還是希望能有類似 bundler
這樣的工具。
試了兩套 gom 跟 godep。我自己是比較喜歡 gom 的 API 設計,而且他的 star 數也比較多。但是在 gom gen gomfile
自動掃描生成 Gomfile
這邊一直出現問題,會掃到很多不相關的東西。相對的同樣功能的 godep save
就沒什麼問題。並且也支援 godep save -copy
直接把整個 dependencies tree 複製到專案目錄下,讓你用 GOPATH
的方式使用,目前使用起來 godep 是一個挺不錯的選擇。
godep 會把你指定的每個 package 裝到 tmp 目錄下,使用 godep path
就可以看到。
用 godep
指令包 go
指令的話就會從這些地方載入套件,有點像是 bundler 的感覺。godep go build
, godep go test
。
目前我還是 goenv 和 godeps 並行,看看將來的發展怎麼樣。也希望官方能儘快解決這個問題,不然現在第三方的 Go package management tool 以一個禮拜一套的速度在推出啊…。
更詳細的 godep 教學,可以參考這篇文章: Manage Dependencies With GODEP
測試套件
可能是 Ruby 寫慣了,總覺得 Go 內建的測試語法不太親民。我在這個專案使用了 testify 的 assert
套件,可以寫出這樣的語法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
testify 除了 assert
之外,也提供了 http
, mock
, suite
可使用,算是滿全面的測試工具。相類似的套件還有 gocheck 這個也滿受歡迎的。
另外兩個我覺得不錯的測試工具是 Goconvey 以及 PrettyTest。
GoConvey 可算一套完整的 BDD/TDD 測試框架,使用了自己的語法,離原生的 testing
又更遙遠了,帶有 WebUI 以及漂亮的 terminal output 可以很清楚產出測試報表。
PrettyTest 則是用自己的 assert 來產出清晰的 terminal output,也可以搭配上面提到的 gocheck 使用。
還有另外非常多的工具可以參考這篇:Go Testing Toolbox
其他工具
go-spew 噴東西相當好用,什麼都可以噴,可以看一下他的 sample output 超威:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
termbox-go 則是寫 CUI 程式的好幫手,非常容易使用。之前那個用 terminal 看股票的 top mop 也是用這個寫的。