goa-1-golang微服务框架设计工具:Goa | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
GoaRESTful 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上进行就可,提一下官网没说的几个...阅读全文

goa-4-使用积累 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
Goa日志Goa默认日志Goa默认日志是基于[log15 package](https://godoc.org/gopkg.in/inconshreveable/log15.v2)。
Goa默认的日志格式固定,如测试代码的mount日志:
INFO[01-25|09:56:34] mount      app=API ctrl=Operands action=Add route="GET /add/:left/:right"依次为:
日志类型日志时间行为名称日志内容其中日志内容是以key=value的形式存在。
Logger接口的实现写在包gopkg.in/inconshreveable/log15.v2,Goa将其重命名为log:
123456789101112131415// A Logger writes key/value pairs to a Handlertype Logger interface { // New returns a new Logger that has this logger's context plus the given context ...阅读全文

goa-5-使用积累-版本变更 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
Goa使用经验今天更新了Goagen的最新commit。虽然版本还是0.0.1,但功能变化了很多,上一篇记录的内容甚至已经不能那样使用了。
新版本(虽然还是0.0.1)全部使用Structure代替之前的marshaling code,避免每次HTTP method都进行一次结构体渲染的操作,提高了效率。
下面是一些用到了的变更:
自定义response状态之前版本的返回状态中需要提供指定View-name的参数,比如有一个名为“tiny”的view,返回的代码是:
1ctx.OK(&res, app.tiny)现在的返回状态代码是:
1ctx.OKTiny(&res)同时在定义返回状态时,也不限与在API实现函数内定义,可以在Resource的Action-Response中进行定义:
1234Response("NotFound", func() { Status(404) Media(UserDataError)})ReferenceReference对Payload进行健全性检查,通过自定义检查范围来对Http 访问参数进行约束。
1234567891011121...阅读全文

Linux-C时间格式转换为Golang时间格式 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
Linux-C时间格式转换为Golang时间格式golang中时间格式以Mon Jan 2 15:04:05 -0700 MST 2006的形式来规范,而通用为%Y-%m-%d %H:%M:%S。
二者之间转换的实现:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465package mainimport ( "time" "fmt" "gopkg.in/inconshreveable/log15.v2")// taken from time/format.govar conversion = map[string]string{ /*stdLongMonth      */ "B": "January", /*stdMonth          */ "b": "Jan", // stdNumMonth       */ "m": "1", /*stdZeroMonth      */ "m...阅读全文

golang-NSQ源码阅读 3-nsq_to_file源码解析-1 引导 | KaiQ.Gu|KerwinKoo Blog

作者:JerryXia | 发表于 , 阅读 (0)
NSQ代码阅读NSQ分三大模块:nsqd、nsqlookupd、nsqadmin,从哪个开始着手很重要。
本人阅读源码习惯从功能少的、尽量闭环的程序着手。纵观上面三个模块,最提纲挈领,最有桥梁作用的应该是nsqlookupd,但nsqlookupd仍然有很多的功能开发,在没有搞清楚其功能之前,不适合直接阅读。因此,我把第一个阅读的源码定为nsq-to-file。
nsq-to-file注意:本地源码地址为:github.com/nsqio/nsq/apps/nsq_to_file
nsq-to-file作为NSQ的一种客户端,其实是在go-nsq的基础上做的功能开发。
nsq-to-file功能是订阅消费指定的话题(topic)/通道(channel),并写到文件中,对输出文件进行有选择的滚动和/或压缩文件。
支持的命令行参数:
1234567891011121314151617-channel="nsq_to_file": nsq 通道(channel)-consumer-opt=: 传递给 nsq.Consumer 的参数 (可能会给多次, http://godoc.o...阅读全文