golang微服務框架設計工具:Goa

PauMeece 8年前發布 | 29K 次閱讀 Google Go/Golang開發

來自: http://kaiq.me/2016/01/20/go/Goa1-golang-goa/


Goa

RESTful go web 快速開發框架,Goa與其他go web開發框架有本質的不同,它是以框架設計為主,是 Design-based HTTP微服務框架。

Install

首先安裝goa代碼生成工具goagen. go get github.com/goadesign/goa/goagen

goa跟goagen的關系是:goagen是工具,是goa項目的主要產物之一;如果不是修改goagen,基本不需要goa的源碼,當然也可以將整體go get下來。


update 2016-01-25

注意(這里有坑):這里一定是從goadesign/goa/goagen中執行go get,不可以直接go get github.com/goadesign/goa,因為這樣會get到一個名為raphael的包,與goa package會產生沖突,可能與Goa版本變更較頻繁有關。如果發生版本沖突,移步#216


安裝代碼依賴自動import工具:

go get golang.org/x/tools/cmd/goimports

注意問題

測試代碼按照Github上進行就可,提一下官網沒說的幾個坑:

1.HTTP Request IDs

這個其實不算坑,是goa的功能之一,但在測試過程中如果沒有具體設置驗證中間件,便伊始會報錯。測試過程中可以對此做屏蔽:

在測試項目main.go文件中:

123
// service.Use(middleware.RequestID())// service.Use(middleware.LogRequest())// service.Use(middleware.Recover())

update:2016-01-19

goa官方提供middleware的簡單實現,提供日志管理,包括請求、回復、ID、故障記錄等功能。需要在GOPATH中get包:

go get github.com/raphael/goa-middleware

由于該包是以中間件形式與goa合用,因此不會直接被build。這樣上段代碼可以不用屏蔽,在API通信時會記錄請求、測試和回復的日志信息。


2.未import package

按官方解釋,是說goa生成次代框架代碼(代碼生成的代碼)后,代碼的import功能交給了工具goimport,但是這個工具有它的局限性,每個人設置的GOPATH數量不一,goimport只檢索其當前所在的GOPATH,所以像fmtstrconv這些常用但屬于go build in的package往往引用不到,需要收到添加,或者將所有GOPATH整合為一,再將當前項目放入其src目錄中。

3.go build過程中找不到package

這是最坑爹的,在goa官方沒有解決方案,當然坑也不是goa挖的,還是那個goimport工具自個挖的。

原因是goimport需要兼容很多golang的版本,而golang版本變更過程中發生過易址事件,當初在google.golang下的包全部轉移到Github中,名字也由cloud更為gcloud-golang, 因此后期的import都是從Github中獲取的。但goimport遇到關于metadata等次代代碼仍然吹從老地址引用,因此會在編譯時報錯。

解決方案:

從Github中獲取新包:

go get github.com/GoogleCloudPlatform/gcloud-golang

軟鏈到本地GOPATH老地址:

ln -s /$GOPATH/src/github.com/GoogleCloudPlatform/gcloud-golang /$GOPATH/src/cloud
 本文由用戶 PauMeece 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!