标签:init method man variable data- mod pos 使用 manage
sqler sql 转rest api 的源码还是比较简单的,没有比较复杂的设计,大部分都是基于开源 
模块实现的。 
说明: 当前的版本为2.0,代码使用go mod 进行包管理,如果本地运行注意golang 版本,我使用docker 运行, 
参考 https://github.com/rongfengliang/sqler-docker-compose/blob/master/Dockerfile
入口主要包含的数据库连接的检测,以及配置文件宏的解析,以及rest 、resp 支持协议的启动
macrosManager 变量 // 启动变量定义
var (
  flagDBDriver = flag.String("driver", "mysql", "the sql driver to be used")
  flagDBDSN = flag.String("dsn", "root:root@tcp(127.0.0.1)/test?multiStatements=true", "the data source name for the selected engine")
  flagAPIFile = flag.String("config", "./config.example.hcl", "the config file(s) that contains your endpoints configs, it accepts comma seprated list of glob style pattern")
  flagRESTListenAddr = flag.String("rest", ":8025", "the http restful api listen address")
  flagRESPListenAddr = flag.String("resp", ":3678", "the resp (redis protocol) server listen address")
  flagWorkers = flag.Int("workers", runtime.NumCPU(), "the maximum workers count")
)
?
var (
  errNoMacroFound = errors.New("Resource not found")
  errValidationError = errors.New("Validation error")
  errAuthorizationError = errors.New("Authorization Error")
)
?
var (
  errStatusCodeMap = map[error]int{
    errNoMacroFound: 404,
    errValidationError: 422,
    errAuthorizationError: 401,
  }
)
?
// 宏管理变量定义
var (
  macrosManager *Manager
)
{
?
    // 配置数据库状态检测
    tstconn, err := sqlx.Connect(*flagDBDriver, *flagDBDSN)
    if err != nil {
      fmt.Println(color.RedString("[%s] %s - connection error - (%s)", *flagDBDriver, *flagDBDSN, err.Error()))
      os.Exit(0)
    }
    tstconn.Close()
  }
?
  {
    // 宏的解析以及vars.go 中变量的赋值
    manager, err := NewManager(*flagAPIFile)
    if err != nil {
      fmt.Println(color.RedString("(%s)", err.Error()))
      os.Exit(0)
    }
    macrosManager = manager
  }
type Manager struct {
  // 宏对象,包含了,rest 请求的生命周期的组件
  macros map[string]*Macro
 // 主要是为了使用使用text/template 模版解析exec 宏
  compiled *template.Template
}
Macro 数据结构 
Macro 定义了每个宏的完整信息: method validator authorizer exec bind include(依赖),transformer 数据转换 
主要的方式是Call ,更具输入的input 数据指定rest 的处理(数据校验,数据绑定,依赖执行,数据转换),后边 
为具体分析
type Macro struct {
  Methods []string
  Include []string
  Validators map[string]string
  Authorizer string
  Bind map[string]string
  Exec string
  Aggregate []string
  Transformer string
?
  name string
  manager *Manager
}
// resp 协议支持
go (func() {
    err <- initRESPServer()
  })()
// rest 协议支持
  go (func() {
    err <- initRESTServer()
  })()
sqler sql 转rest api 源码解析(一)应用的启动入口
标签:init method man variable data- mod pos 使用 manage
原文地址:https://www.cnblogs.com/rongfengliang/p/10267706.html