| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
PauMeece
9年前发布

golang微服务框架设计工具:Goa

来自: 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 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1453902569198.html
Google Go/Golang开发