Skip to content

gotomicro/egoctl

Repository files navigation

egoctl

1 Requirements

  • Go version >= 1.18

2 Installation

bash <(curl -L https://raw.githubusercontent.com/gotomicro/egoctl/main/getlatest.sh)

通过以上脚本,可以下载protoc工具全家桶,以及ego的protoc插件和egoctl

  • /usr/local/bin/protoc
  • /usr/local/bin/protoc-gen-go
  • /usr/local/bin/protoc-gen-go-grpc
  • /usr/local/bin/protoc-gen-openapiv2
  • /usr/local/bin/protoc-gen-go-errors
  • /usr/local/bin/protoc-gen-go-http
  • /usr/local/bin/egoctl

3 快速生成代码

  • 我们第一次进入页面,先配置生成代码的模板,你也可以自己自定义自己的模板

  • 然后在进入项目页面,创建项目

  • 编写DSL

  • 创建项目的go mod
mkdir /Users/askuy/tmp/egotest1 
cd /Users/askuy/tmp/egotest1 && go mod init egotest1
  • 点击生成代码
  • 运行你的代码
cd /Users/askuy/tmp/egotest1
go mod tidy
vim config/local.toml 更改db配置
export EGO_DEBUG=true && go run main.go

3 模板

因为前端会使用关键字{{, }},而pongo2的模板也会使用该关键字,所以egoctlpongo2/v6版本fork到项目里, 将模板关键字{{,}}改为{$,$}

5 DSL配置

package egoctl
type User struct {
	Uid int `gorm:"AUTO_INCREMENT" json:"id" dto:"" ego:"primary_key"`    // id
    UserName string `gorm:"not null" json:"userName" dto:""` // 昵称
}

6 模板配置

6.1 根据模型设置模板

DSL配置

package egoctl
type User struct {
	Uid int `gorm:"AUTO_INCREMENT" json:"id" dto:"" ego:"primary_key"`                      // id
    UserName string `gorm:"not null" json:"userName" dto:""` // 昵称
}

6.2 获取主键

模版配置

{$modelSchemas|fieldsGetPrimaryKey|snakeString$}

6.3 生成结构体

模板配置

type {{modelName|upperFirst}} struct {
	{% for value in modelSchemas %}
	{$ value.FieldName $} {$ value.FieldType $} `gorm:"{$ value|fieldGetTag:"gorm" $}"` {$ value.Comment $}
	{% endfor %}
}

6.4 判断某字段是否存在

模板配置

{% if modelSchemas|fieldsExist:Uid %}
{% endif %}

6.5 判断某个字段中某个tag值是否存在

{% if modelSchemas|fieldsTagExist:json,userName %}
{% endif %}

7 根据单个字段设置模板

DSL配置

type User struct {
	Uid int `gorm:"AUTO_INCREMENT" json:"id" dto:"" ego:"primary_key"`                      // id
    UserName string `gorm:"not null" json:"userName" dto:""` // 昵称
}

7.1 获取某个字段的驼峰(常用于JSON,前后端对接)

{$ value.FieldName|camelString|lowerFirst $}
UserName  变成   userName

7.2 获取某个字段的蛇形(常用于数据库)

{$ value.FieldName|snakeString|lowerFirst $}
UserName  变成   user_name