一个轻量的gin
业务框架
安装使用
go get -u github.com/x-lambda/nautilus
依赖
- 安装
protoc
$ brew install protobuf
- 安装
protoc-gen-go
$ git clone https://github.com/golang/protobuf.git
$ cd protobuf/protoc-gen-go
$ go install
- 安装
protoc-gen-gin
$ go get -u github.com/x-lambda/protoc-gen-gin
# go 1.17及以上执行下面命令
# go install github.com/x-lambda/protoc-gen-gin@latest
- 安装
protoc-gen-go-grpc
# TODO
支持多应用,可以在app/
下定义多服务
app/
|-demo/
|-main.go // demo应用
|-example/
|-main.go // example应用
|-shop/
|-main.go // shop应用
|-login/
|-main.go // login应用
数据库支持,支持metrics/tracing
// 选择某个数据库,可以支持多实例
conn := sqlx.Get(ctx, "db1")
ctx := context.TODO()
var u User
err = conn.GetContext(ctx, &u, "select * from users where id = ?", id)
if err != nil {
return
}
参考README
服务定义
service BlogService {
rpc CreateArticle(CreateArticleReq) returns (CreateArticleResp) {
option (google.api.http) = {
post: "/v1/author/{author_id}/articles"
};
}
}
message CreateArticleResp {
int32 code = 1;
string msg = 2;
}
message CreateArticleReq {
string title = 1;
string content = 2;
// @inject_tag: form:"author_id" uri:"author_id"
int32 author_id = 3;
}
接口实现层
type Server struct {}
func (s *Server) CreateArticle(ctx context.Context, req *pb.CreateArticleReq) (resp *pb.CreateArticleResp, err error) {
// TODO 调用service层代码
}
对应的是server/controller
层
逻辑处理层
// 1. 调用dao层代码,例如查询blog数据
func Foo(ctx context.Context, req pb.Req) (result interface{}, err error) {
b, err := blog.QueryByID(ctx, req.ID)
if err != nil {
return
}
total, err := blog.CountOnline(ctx)
if err != nil {
return
}
// 聚合结果返回
return
}
工具包
conf
配置sqlx
数据库log
日志metrics
prometheus
middleware
中间件trace
opentracing