yago

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 27, 2019 License: MIT Imports: 28 Imported by: 4

README

Yago Scafford

avatar

Yago web开发脚手架

目录

安装

首先你需要安装 Go (version 1.11+), 然后执行go get 安装yago
 go get github.com/hulklab/yago/yago

依赖

go >= 1.11(由于使用了 go mod 管理版本依赖)

如果想在GOPATH下用mod, 请设置 GO111MODULE=on 则在 GOPATH/src 目录下使用 go get 时也默认采用 go mod
export GO111MODULE=on

快速开始

1. 用 yago 在当前目录创建你的项目 myapp
yago init -a myapp
2. 进入目录初始化
cd myapp/
go mod init
3. 构建
go build
4. 创建属于自己的配置文件,并启动
sh env.init.sh yourname
./myapp
5. 控制是否需要在此机器上开启 task 任务,有两种方式
  • 修改配置文件中的 app.task_enable,默认为开启
  • 修改环境变量 export {{配置文件中的app_name}}_APP_TASK_ENABLE=1, 1 表示开启,0 表示关闭,配置文件与环境变量同时存在时环境变量生效

使用说明

文件结构
├── app
│   ├── g
│   │   └── errors.go //系统级错误定义处
│   ├── modules //模块目录
│   │   └── home // 样例模块
│   │       ├── homecmd // 命令行 控制器
│   │       │   └── home.go
│   │       ├── homedao // 数据库访问层
│   │       │   └── home.go
│   │       ├── homehttp // http 控制器
│   │       │   └── home.go
│   │       ├── homemodel // 业务逻辑层
│   │       │   └── home.go
│   │       ├── homerpc // grpc 控制器
│   │       │   ├── home.go
│   │       │   ├── home_test.go
│   │       │   │   └── homepb
│   │       │   │       ├── home.pb.go
│   │       │   │       └── home.proto // proto文件
│   │       │   └── README.md
│   │       └── hometask // 常驻进程和定时任务控制器
│   │           └── home.go
│   ├── route // 路由管理目录
│   │   ├── route.go // 路由控制文件
│   └── third // 第三方api调用目录
│       └── homeapi 
│           ├── home.go // http rpc 客户端接口封装
│           └── protobuf
│               └── homepb
│                   ├── home.pb.go
│                   └── home.proto
├── conf // 配置文件目录
│   └── app.toml
├── main.go // 程序总入口
└── tools // 构建工具
    └── build.sh
路由注册

yago 提供了四种控制器入口,分别是 命令行(cmd),http,grpc, 常驻进程和定时任务(task)。各个控制器的路由注册就在各个控制器层的 init函数中完成。

请分别参考样例

1. http 路由

@reference example/app/modules/home/homehttp/home.go

2. cmd 路由

@reference example/app/modules/home/homecmd/home.go

3. task 路由

@reference example/app/modules/home/hometask/home.go

4. grpc 路由

@reference example/app/modules/home/homerpc/home.go

配置

配置文件解析完成后存储在全局yago.Config中,yago.Config是 https://github.com/spf13/viper 的扩展。原生采用viper的方法来获取配置文件的值即可。

组件

yago集成的组件包括 redis,mysql orm,logger,kafka,组建统一实现了Ins 单例方法,需要使用组件可以参考各组件的test文件。

模块
1. 创建新模块

在项目根目录下,使用yago创建模块。新创建的模块会自动将路由加载到myapp/routes中,模块内容的编写可以参考样例 home模块

cd myapp
yago new -m newmodule
错误处理
  1. 系统级错误定义处 ./app/g/error.go
  2. 使用 @reference example/app/modules/homehttp/home.go::AddAction
第三方API调用

第三方API调用目前支持 http和grpc

  1. 目录规范 @see example/app/third
  2. 使用样例 @reference example/app/third/homeapi/home.go
Goland 使用 mod
  1. Preferences -> Go -> Go modules(vgo)

  1. 如果还有标红的提示,点击 Sync packages

已知问题及解决方案

  1. unknown import path "github.com/ugorji/go/codec": ambiguous import: found github.com/ugorji/go/codec in multiple modules 模块冲突问题

    原因参考:

    https://cloud.tencent.com/developer/article/1417112

    解决方案: 在go.mod文件最下面添加如下代码

    replace github.com/ugorji/go v1.1.4 => github.com/ugorji/go/codec v0.0.0-20190204201341-e444a5086c43
    

Documentation

Index

Constants

View Source
const (
	// 1-1000 系统错误, 1000 - 9999 业务公共错误, 10000 - .... 业务错误
	OK           = Err("0")
	E            = Err("1=") // 自定义错误信息
	ErrParam     = Err("2=")
	ErrSign      = Err("3=sign failed")
	ErrAuth      = Err("4=auth failed")
	ErrForbidden = Err("5=forbidden")
	ErrNotLogin  = Err("6=user not login")
	ErrSystem    = Err("7=system error")
	ErrOperate   = Err("8=")
	ErrUnknown   = Err("9=unknown error")
)

Variables

View Source
var CmdRouterMap = make(map[string]*CmdRouter)
View Source
var Component = new(Components)
View Source
var GlobalCloseChan = make(chan int)
View Source
var HttpRouterMap = make(map[string]*HttpRouter)
View Source
var RpcServer *grpc.Server
View Source
var TaskCloseChan = make(chan int)
View Source
var TaskRouterList []*TaskRouter

Functions

func AddCmdRouter

func AddCmdRouter(use, short string, action CmdHandlerFunc, args ...CmdArg)

func AddHttpRouter

func AddHttpRouter(url, method string, action HttpHandlerFunc, h HttpInterface)

func AddTaskRouter

func AddTaskRouter(spec string, action TaskHandlerFunc)

func Hostname

func Hostname() string

func IsEnvDev added in v1.1.2

func IsEnvDev() bool

func IsEnvProd added in v1.1.2

func IsEnvProd() bool

func RestartApp added in v1.1.8

func RestartApp() error

Types

type App

type App struct {
	// 是否开启debug模式
	DebugMode bool

	// http run mode
	HttpRunMode string
	// 开启http服务
	HttpEnable bool
	// http路由配置
	HttpRouters []*HttpRouter

	// https 证书配置
	HttpSslOn    bool
	HttpCertFile string
	HttpKeyFile  string
	// http html 模版配置
	HttpViewRender bool
	HttpViewPath   string
	HttpStaticPath string
	// http cors 跨域配置
	HttpCorsAllowAllOrigins  bool
	HttpCorsAllowOrigins     []string
	HttpCorsAllowMethods     []string
	HttpCorsAllowHeaders     []string
	HttpCorsExposeHeaders    []string
	HttpCorsAllowCredentials bool
	HttpCorsMaxAge           time.Duration
	// http gzip 压缩
	HttpGzipOn    bool
	HttpGzipLevel int
	// http pprof
	HttpPprof bool

	// 开启task服务
	TaskEnable bool
	// task路由配置
	TaskRouters []*TaskRouter

	// rpc
	RpcEnable bool
	// contains filtered or unexported fields
}

func NewApp

func NewApp() *App

func (*App) Close added in v1.1.8

func (a *App) Close()

func (*App) Run

func (a *App) Run()

type AppConfig

type AppConfig struct {
	*viper.Viper
}
var Config *AppConfig

func NewAppConfig

func NewAppConfig(cfgPath string) *AppConfig

type Cmd

type Cmd struct {
	*cobra.Command
}

func NewCmd

func NewCmd() *Cmd

func (*Cmd) LoadCmdRouter

func (c *Cmd) LoadCmdRouter()

func (*Cmd) RunCmd

func (c *Cmd) RunCmd()

type CmdArg

type CmdArg struct {
	Name      string
	Shorthand string
	Value     string
	Usage     string
	Required  bool
}

type CmdHandlerFunc

type CmdHandlerFunc func(cmd *cobra.Command, args []string)

cmd

type CmdRouter

type CmdRouter struct {
	Use    string
	Short  string
	Action CmdHandlerFunc
	Args   []CmdArg
}

type Components

type Components struct {
	// contains filtered or unexported fields
}

func (*Components) Ins

func (c *Components) Ins(key string, f func() interface{}) interface{}

type Ctx

type Ctx struct {
	*gin.Context
	// contains filtered or unexported fields
}

func NewCtx

func NewCtx(c *gin.Context) *Ctx

func (*Ctx) GetResponse added in v1.1.9

func (c *Ctx) GetResponse() (*ResponseBody, bool)

func (*Ctx) RequestBool

func (c *Ctx) RequestBool(key string, def ...bool) bool

func (*Ctx) RequestFileContent added in v1.1.4

func (c *Ctx) RequestFileContent(key string) ([]byte, error)

func (*Ctx) RequestFloat64

func (c *Ctx) RequestFloat64(key string, def ...float64) (float64, error)

func (*Ctx) RequestInt

func (c *Ctx) RequestInt(key string, def ...int) (int, error)

func (*Ctx) RequestInt64

func (c *Ctx) RequestInt64(key string, def ...int64) (int64, error)

func (*Ctx) RequestSliceInt

func (c *Ctx) RequestSliceInt(key string, def ...int) []int

func (*Ctx) RequestSliceInt64

func (c *Ctx) RequestSliceInt64(key string, def ...int64) []int64

func (*Ctx) RequestSliceString

func (c *Ctx) RequestSliceString(key string, def ...string) []string

func (*Ctx) RequestString

func (c *Ctx) RequestString(key string, def ...string) string

func (*Ctx) SetData

func (c *Ctx) SetData(data interface{})

func (*Ctx) SetDataOrErr

func (c *Ctx) SetDataOrErr(data interface{}, err Err)

func (*Ctx) SetError

func (c *Ctx) SetError(err Err, msgEx ...string)

func (*Ctx) Validate

func (c *Ctx) Validate() error

type Err

type Err string

func NewErr

func NewErr(err interface{}, args ...interface{}) Err

生成通用错误, 接受通用的 error 类型或者是 string 类型 eg. yago.NewErr(errors.New("err occur")) eg. yago.NewErr("something is error") eg. yago.NewErr("%s is err","query")

func (Err) Code added in v1.1.9

func (e Err) Code() int

func (Err) Error

func (e Err) Error() string

func (Err) HasErr

func (e Err) HasErr() bool

func (Err) String added in v1.1.9

func (e Err) String() string

type HttpHandlerFunc

type HttpHandlerFunc func(c *Ctx)

type HttpInterface

type HttpInterface interface {
	Labels() validator.Label
	Rules() []validator.Rule
	BeforeAction(c *Ctx) Err
	AfterAction(c *Ctx)
}

type HttpRouter

type HttpRouter struct {
	Url    string
	Method string
	Action HttpHandlerFunc
	// contains filtered or unexported fields
}

http

type ResponseBody

type ResponseBody struct {
	ErrNo  int         `json:"errno"`
	ErrMsg string      `json:"errmsg"`
	Data   interface{} `json:"data"`
}

type TaskHandlerFunc

type TaskHandlerFunc func()

task

type TaskRouter

type TaskRouter struct {
	Spec   string
	Action TaskHandlerFunc
}

Directories

Path Synopsis
common
Code generated by yago.
Code generated by yago.
app/modules/home/homerpc/homepb
Package app_homepb is a generated protocol buffer package.
Package app_homepb is a generated protocol buffer package.
app/third/homeapi/homepb
Package app_homepb is a generated protocol buffer package.
Package app_homepb is a generated protocol buffer package.
libs
arr
orm
rds
str

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL