|
|
2 years ago | |
|---|---|---|
| cmd | 2 years ago | |
| file | 2 years ago | |
| internal | 2 years ago | |
| logger | 2 years ago | |
| orm | 2 years ago | |
| scrpit | 2 years ago | |
| shell | 2 years ago | |
| static | 2 years ago | |
| utils | 2 years ago | |
| LICENSE | 2 years ago | |
| Makefile | 2 years ago | |
| README.md | 2 years ago | |
| build.sh | 2 years ago | |
| git-hook.sh | 2 years ago | |
| go.mod | 2 years ago | |
| go.sum | 2 years ago |
用于生成Go的Model文件,数据库操作太过于麻烦,依靠工具可以直接生成model对象,默认使用的是xorm映射。
首先声明 : 公司内部的数据库表字段全部是
下划线模式,表名称全部是下划线模式
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
用于快速构建脚手架项目
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
帮助GitHook 自动检测代码,规范代码,格式化代码。
主要利用工具 go fmt , go import
使用:
./git-hook.sh
文件位置:
用来生产我们使用脚手架的一些通用的代码
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)