No Description

yangmao f9499918cf first 2 years ago
cmd f9499918cf first 2 years ago
file f9499918cf first 2 years ago
internal f9499918cf first 2 years ago
logger f9499918cf first 2 years ago
orm f9499918cf first 2 years ago
scrpit f9499918cf first 2 years ago
shell f9499918cf first 2 years ago
static f9499918cf first 2 years ago
utils f9499918cf first 2 years ago
LICENSE f9499918cf first 2 years ago
Makefile f9499918cf first 2 years ago
README.md f9499918cf first 2 years ago
build.sh f9499918cf first 2 years ago
git-hook.sh f9499918cf first 2 years ago
go.mod f9499918cf first 2 years ago
go.sum f9499918cf first 2 years ago

README.md

组件:

go-orm orm代码生产工具

go-new 业务代码生成工具

go-build 脚手架生成工具

git-hook 代码检测工具

go-orm

用于生成Go的Model文件,数据库操作太过于麻烦,依靠工具可以直接生成model对象,默认使用的是xorm映射。

​ 首先声明 : 公司内部的数据库表字段全部是下划线模式,表名称全部是下划线模式

  • 支持生成xorm的model对象
  • 支持生成dao对象
  • 支持生成dto对象(time.Time 转化成 int64时间搓)
  • 支持外部配置文件,防止重复输入配置文件,默认配置文件在 go-orm-config.json,这个优先级低于 命令,如果你命令传入-config,显示申明配置文件,那么它的优先级最高。

需要支持Go mod ,所以版本最好V1.13版本以上

编译

export GOPRIVATE="*gitlab*" && go get -u -v gitea.ckfah.com/go-script/cmd/go-orm

快速开始

  • 配置文件如下:

    {
    "db_type": "mysql",
    "tags": [
    "xorm"
    ],
    "db_name": "urban_violation",
    "db_host": "10.9.198.84",
    "db_port": 3306,
    "db_user_name": "ttyc",
    "db_password": "ttyongche@2014",
    "db_charset": "utf8"
    }
    
  • 帮助

    ➜  bin go-orm -h
    load config /Users/dong/go/bin/go-orm-config.json
    generator version: anthony/1.0.0
    Usage: generator -host=localhost -port=3306 -d=urban_v -u=root -p=123456 -t=class -t=student -tag=xorm -dir=./tmp
    Option:
    -charset string
    	database table names, eg: -charset=utf8 (default "utf8")
    -config string
    	orm config file, the shell instrument is priority than config file
    -d string
    	database name, eg: -d=xorm
    -dao_package string
    	package name default dao, eg:-dao_package=dao (default "dao")
    -db_type string
    	database type, eg: -db_type=mysql (default "mysql")
    -dir string
    	generated directory default ./tmp, eg: -dir=./tmp (default "./tmp")
    -dto_package string
    	package name default dao, eg:-dto_package=dao (default "dto")
    -h	this help
    -host string
    	database host, eg: -port=localhost (default "localhost")
    -model_package string
    	package name default model, eg:-model_package=model (default "model")
    -p string
    	database password, eg: -p=123456 (default "123456")
    -port int
    	database port, eg: -port=3306 (default 3306)
    -t value
    	database table names default all tables , eg: -t=class -t=user
    -tag value
    	modle tag names support add many tags,default xorm, eg: -tag=xorm -tag=json
    -u string
    	database username, eg: -u=root (default "root")
    -v	generator version
    
  • 开始

下面我使用的是配置文件,你也可以使用参数覆盖配置文件的属性

➜  bin go-orm -t=op_worker -d=ebike
load config /Users/dong/go/bin/go-orm-config.json
[GEN-INFO] save path: /Users/dong/go/bin/tmp
[xorm] [info]  2020/10/30 19:17:50.721009 PING DATABASE mysql
[GEN-INFO] save op_worker model success, path=/Users/dong/go/bin/tmp/model/op_worker.go
[GEN-INFO] save op_worker dao success, path= /Users/dong/go/bin/tmp/dao/op_worker_dao.go
[GEN-INFO] save ebike dto success, path= /Users/dong/go/bin/tmp/dto/ebike_dto.go
generate template finished

go-build

​ 用于快速构建脚手架项目

编译

export GOPRIVATE="*gitlab*" && go get -u -v gitea.ckfah.com/go-script/cmd/go-build

使用

  • 帮助

    ➜  go-script git:(master) ✗ ./bin/go-build -h
    [GO-BUILD] 2020/11/30 11:20:36 main.go:173: [INFO] \n================go-build  help=====================
    go-build -dir=/data/temp -mod=go-template -git=git@gitlab.corp.cjjyProject:ebike-urban-op/go-template.git -branch=gauss -vendor=true
    Option:
    构建master分支(例如:项目本地地址/data/ebike-op-demo,项目名称为:ebike-op-demo):
        go-build -dir=/data/ebike-op-demo -mod=ebike-op-demo
    构建gauss分支:
    go-build -dir=/data/temp -mod=go-template -branch=gauss
    构建vendor项目:
        go-build -dir=/data/temp -mod=go-template -vendor=true
    
    -branch string
        git branch, eg:-branch=master (default "master")
    -dir string
        git clone dir if not set default go mod project name, eg:-dir=/data/temp
    -git string
        git remote addr, eg:-git=git@gitlab.corp.cjjyProject:ebike-urban-op/go-template.git (default "git@gitlab.corp.cjjyProject:ebike-urban-op/go-template.git")
    -h    this help
    -mod string
        go mod name, eg:-mod=go-template (default "go-template")
    -vendor
        use go vendor mod, default disable
    
  • 使用

    go-build -dir=./go-template -mod=go-template -git=git@gitlab.corp.cjjyProject:ebike-urban-op/go-template.git  -branch=master
    

注意可能使用其他分支构建,默认是 master分支,比如你使用gauss分支:

go-build -dir=./go-template -mod=go-template -git=git@gitlab.corp.cjjyProject:ebike-urban-op/go-template.git  -branch=gauss

git-hook.sh

帮助GitHook 自动检测代码,规范代码,格式化代码。

主要利用工具 go fmt , go import

  • 使用:

    ./git-hook.sh
    
  • 文件位置:

执行脚本

代码检测脚本

代码Commit-Comment脚本

go-new

​ 用来生产我们使用脚手架的一些通用的代码

编译

export GOPRIVATE="*gitlab*" && go get -u -v gitea.ckfah.com/go-script/cmd/go-new

使用

  • 使用帮助

    ➜  bin go-new -h
    ================go-new  help=====================
    go-new -r=/user/list -s=user
    Option:
    -c string
    	方法注释!!service方法和controller方法注释是一样的奥!!不传不生成
    -h	帮助!!
    -oc
    	只生成Controller方法
    -od
    	比如 -od 只生成Dto对象
    -on
    	只生成New方法
    -os
    	只生成Service方法
    -r string
    	请求路由,比如/echo,生成Echo方法,/user/list生成UserList,必须传递
    -s string
    	生成的Service/Controller名字,比如 user,则生成userService,必须传递
    -t	生成third,注意也是复用router 和 service_name,所以必须传递-r -s!!
    -ug
    	使用gin框架,默认是gauss
    
  • 生成service ,controller

    ➜  bin go-new -s=user -r=user/info -c="查看用户信息"
    ==================touch file=======================
    controller: user_controller.go
    service: user_service.go
    dto: user_dto.go
    
    
    // =======================user_controller.go==============================
    
    type userController struct {
    }
    
    func NewUserController() *userController {
    	return new(userController)
    }
    
    var (
    	userService = service.NewUserService()
    )
    
    // =======================user_service.go==============================
    
    type userService struct {
    }
    
    func NewUserService() *userService {
    	return new(userService)
    }
    
    
    // =======================user_controller.go==============================
    
    // 查看用户信息
    func (this *userController) UserInfo(ctx *engines.Context) {
    	request := new(dto.UserInfoRequest)
    	err := ctx.BindJSON(request)
    	if err != nil {
    		logger.Warnc(ctx, "[UserInfo] bind params err,err=%v", err)
    		util.FailJson(ctx, exception.ParamsBindError)
    		return
    	}
    	logger.Infoc(ctx, "[UserInfo] start,request=%+v", request)
    	result, cerr := userService.UserInfo(ctx, &request.Params)
    	if cerr != nil {
    		logger.Warnc(ctx, "[UserInfo] end err,err=%v", cerr)
    		util.FailJson(ctx, cerr)
    		return
    	}
    	logger.Infoc(ctx, "[UserInfo] end,result=%+v", result)
    	util.SuccessJson(ctx, result)
    }
    
    // =======================user_dto.go==============================
    // 查看用户信息
    type UserInfoRequest struct {
    	Params UserInfoParams `json:"params" binding:"required"`
    }
    
    type UserInfoParams struct {
    }
    
    type UserInfoResult struct {
    }
    
    
    // =======================user_service.go==============================
    
    // 查看用户信息
    func (this *userService) UserInfo(context *engines.Context, params *dto.UserInfoParams) (*dto.UserInfoResult, cerror.Cerror) {
    	return nil, nil
    }
    
    
    // ======================service.go==================================
    UserInfoError = util.NewSCerror(userInfoErrorCode)
    
  • 生成third

    ➜  bin go-new -s=user -r=user/info -c="查看用户信息" -t
    ==================touch file=======================
    third: user_third.go
    dto: user_dto.go
    注意配置 apollo or env
    
    // ===========================user_third.go===========================
    
    // api-doc-address:
    type userThird struct {
    }
    
    func NewUserThird() *userThird {
    	return &userThird{}
    }
    
    const (
    	_UserThirdServerName = "user"
    )
    
    func (*userThird) GetServerName() string {
    	return _UserThirdServerName
    }
    
    // 查看用户信息
    func (this *userThird) UserInfo(ctx *engines.Context, params *dto.UserInfoParams) (*dto.UserInfoResponse, cerror.Cerror) {
    	path := "/user/info"
    	response := new(dto.UserInfoResponse)
    	err := util.HttpRequestAndDecode(ctx, this.GetServerName(), path, params, response)
    	if err != nil {
    		logger.Warnc(ctx, "[UserInfo] request err,params=%+v,err=%v", params, err)
    		return nil, exception.UserInfoError(err)
    	}
    	return response, nil
    }
    
    
    // =======================user_dto.go==============================
    // 查看用户信息
    type UserInfoParams struct {
    }
    
    type UserInfoResponse struct {
    }
    
    
    //======================= config/apollo/namespaces.json =======================
    
    {
    "name": "user",
    "keys": [
    {
        "name": "user.host",
        "mapTo": "host"
    },
    {
        "name": "user.key",
        "mapTo": "key"
    },
    {
        "name": "user.name",
        "mapTo": "name"
    }
    ]
    }
    
    //======================= apollo添加properties,注意host key=======================
    
    # user 服务
    user.host=
    user.key=
    user.name=user
    
    
    //=======================如果不是apollo,请在env.ini中添加,注意host key=======================
    
    ;user 服务
    [user]
    host=
    key=
    name=user
    
    
    // ======================third.go==================================
    UserInfoError = util.NewECerror(userInfoErrorCode)