大的golang工程都是怎麼從0開始構建的,代碼又是怎麼組織的?

聽說7牛已經開始大規模的用golang了,感覺很多地方搞不懂。先說明,我是前端工程師,之前寫nodejs和groovy。遇到golang之後感覺無從下手了,沒有很好的包管理機制方式,沒有腳手架一樣的工具,調試貌似也不方便等等,那麼問題來了,大的golang工程都是怎麼從0開始構建的,代碼又是怎麼組織的,網上的資料也很少,感覺說的都不太對。是不是我還沒走出node和java的圈子..求大神指點。


https://golang.org/doc/code.html 官網就有個文檔。

以創建一個託管在github上的項目為例,步驟如下:

在github上創建repo,假定地址為http://github.com/user/package;

執行go get http://github.com/user/package將代碼放進$GOPATH/src下,因為還沒有代碼,所以會有提示說沒發現package什麼的,可以忽略;

上面這步也可以直接通過git clone完成,首先mkdir -p $GOPATH/src/http://github.com/user(如果已經有這個目錄了就跳過),然後cd $GOPATH/src/http://github.com/user,再git clone [clone url]。略麻煩,但效果一樣;

上面的$GOPATH我是設成$HOME的,所以代碼都會放在~/src/http://github.com/user/package下。可以用ln -s ~/src/http://github.com/user/package做個軟鏈方便進入;

這時就可以開始寫代碼、push等等了。

初學者常犯的錯誤是,直接git clone [clone url]在某個目錄,而不是放在$GOPATH/src下。這樣在使用子模塊,例如sub1時,麻煩不少。假設子模塊代碼放在~/package/sub1而不是~/src/http://github.com/package/package/sub1下,那主模塊里用import "http://github.com/user/package/sub1"的話,更新sub1的代碼後,主模塊所引用的代碼是沒有變化的,因為本地有兩份代碼,並沒有同步。所以這個時候初學者就可能會用import "./sub1"來代替,導致這個package無法使用go get http://github.com/user/package來安裝。把代碼放在$GOPATH/src下,本地就只有一份代碼,就不會有這個問題了。

如果要使用某個package的某個特定版本,可以用這個服務 gopkg.in - Stable APIs for the Go language。或者自己在github上fork一份,再更改項目里的import path。用這個工具 gomvpkg - GoDoc 可以批量改import path,不用手工一個個來。

調試器有這個 derekparker/delve · GitHub,gdb據說也行,我沒用過。官方的調試工具還在開發中 golang/debug · GitHub。

泛型容器或者演算法,可以先寫成模板,然後用工具生成針對具體類型特化的代碼。我剛寫了個這樣的工具 reusee/ccg · GitHub。


找個牛逼的go開源工程研究下,最佳實踐就好。


go 的工程相比 js 和 java 來說簡單的不是一個數量級的,可以直接理解成文件夾管理就ok了,只是要按照一個約定好的文件夾結構來存儲,這樣所有的庫都是一個風格的,使用起來也方便。你可以看一下 go 的文檔關於 go 的 GOROOT GOPATH 的環境變數設置,只要弄好這幾個環境變數,那麼其他東西就簡單了。所有的庫和源代碼都是放在 GOPATH的src目錄下面,至於其他工具都是輔助工具而已,官方的 dep 工具可以看一下


推薦閱讀:

哪些互聯網公司在使用領域驅動設計?
AI 公司該如何設計基於微服務的 AI SaaS 架構丨硬創公開課
未來會出現96位計算機么?
庫,框架,架構,平台,有什麼明確的區別?
如何畫架構圖?

TAG:架構 | Go語言 | 七牛雲存儲 |