Skip to content

x-lambda/nautilus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nautilus

一个轻量的gin业务框架

安装使用

go get -u github.com/x-lambda/nautilus

依赖

  1. 安装protoc
$ brew install protobuf
  1. 安装protoc-gen-go
$ git clone https://github.com/golang/protobuf.git
$ cd protobuf/protoc-gen-go
$ go install 
  1. 安装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
  1. 安装protoc-gen-go-grpc
# TODO

项目结构

app

支持多应用,可以在app/下定义多服务

app/
  |-demo/
        |-main.go  // demo应用
  |-example/
        |-main.go  // example应用
  |-shop/
        |-main.go  // shop应用
  |-login/
        |-main.go  // login应用

dao

数据库支持,支持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

api

服务定义

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;
}

ctrl

接口实现层

type Server struct {}

func (s *Server) CreateArticle(ctx context.Context, req *pb.CreateArticleReq) (resp *pb.CreateArticleResp, err error) {
	// TODO 调用service层代码
}

对应的是server/controller

svc

逻辑处理层

// 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
}

pkg

工具包

  • conf 配置
  • sqlx 数据库
  • log 日志
  • metrics prometheus
  • middleware 中间件
  • trace opentracing

开发流程

  1. 定义接口服务 在api/下定义接口,建议格式api/demo/v${num}/${xx}.proto,参考pb描述文件 然后执行命令,会自动生成reqresp代码

    $ make rpc
  2. 实现接口 在ctrl/下实现定义的接口,建议格式ctrl/demov0/server.go,参考server

    ctrl一般是参数校验,和归类响应数据等,调用顺序

    ctrl---->svc----->dao
    
  3. 注册接口 将实现的接口注册路由,参考注册路由