Application是PGO的应用对象,其全局实例pgo.App是框架初始化的第一个对象,通过pgo.App可以访问到框架的所有组件。
Application的配置文件即是整个程序的配置文件(conf/app.yaml),通过配置文件可以对Application及所有其它组件进行配置。文件格式:
# 应用名称,默认为可执行程序名称
name: "app-name"
# GO线程数,默认为CPU核心数
GOMAXPROCS: 2
# 运行时目录,默认: @app/runtime
runtimePath: "@app/runtime"
# 静态资源目录,默认: @app/public
publicPath: "@app/public"
# 视图模板目录,默认: @app/view
viewPath: "@app/view"
# 服务器配置
server:
# http服务地址,若httpAddr和httpsAddr都为空,则使用"0.0.0.0:8000"
httpAddr: "0.0.0.0:8000"
# debug服务地址,/debug/pprof及服务状态输出,默认为空
debugAddr: "0.0.0.0:8100"
# https服务地址,需要同时指定crtFile和keyFile,默认为空
httpsAddr: "0.0.0.0:8443"
# https证书路径
crtFile: "@app/conf/site.crt"
# https私钥路径
keyFile: "@app/conf/site.key"
# 插件组件列表,不指定时默认支持gzip, 指定该字段但列表为空时,表示不使用任何插件
plugins: ["gzip"]
# 组件配置
components:
# 日志组件
log: {...}
# 其它组件
- 导入PGO
- 在main包中通过
import "github.com/pinguo/pgo"
导入pgo - 执行pgo的init函数,构造并初始化App的属性
- 初始化config, container, server三个核心组件
- 添加核心组件的默认配置
- 注册路由、日志等核心组件
- 在main包中通过
- 调用App及其组件的方法,定制化各种组件,如添加自定义路由规则等,通常这不需要执行,应该通过配置文件进行配置。
- 调用pgo.Run(),启动http服务或处理command命令
每个组件都是全局单例对象,在第一次使用时自动构造、配置和初始化,通常在配置文件中指定组件配置。
示例:
# 日志组件配置(app.components.log),组件必须包含class字段,
# 核心组件的class由框架设置,eg. log组件为"@pgo/Log",
# 核心组件通过框架提供的方法获取,eg. log := pgo.App.GetLog()
log:
levels: "ALL"
traceLevels: "DEBUG"
chanLen: 1000
flushInterval: "60s"
targets:
info:
class: "@pgo/FileTarget"
levels: "DEBUG,INFO,NOTICE"
filePath: "@runtime/info.log"
maxLogFile: 10
rotate: "daily"
error: {
class: "@pgo/FileTarget"
levels: "WARN,ERROR,FATAL"
filePath: "@runtime/error.log"
maxLogFile: 10
rotate: "daily"
# redis组件(app.components.redis),
# 获取非核心组件需要进行类型转换,例如:
# redis := pgo.App.Get("redis").(*Redis.Client)
redis:
class: "@pgo/Client/Redis/Client"
prefix: "pgo_"
password: ""
db: 0
maxIdleConn: 10
maxIdleTime: "60s"
netTimeout: "1s"
probInterval: "0s"
servers:
- "127.0.0.1:6379"
- "127.0.0.1:6380"
框架定义的核心组件如下:
map[string]string{
"router": "@pgo/Router", // 路由组件
"log": "@pgo/Log", // 日志组件
"status": "@pgo/Status", // 状态码组件
"i18n": "@pgo/I18n", // 国际化组件
"view": "@pgo/View", // 视图组件
"gzip": "@pgo/Gzip", // Gzip组件
"file": "@pgo/File", // 静态文件组件
"http": "@pgo/Client/Http/Client",
}
框架支持别名字符串,可以用在代码和配置文件中,PGO定义的别名如下:
@app
项目根目录绝对路径@runtime
项目运行时目录绝对路径@view
项目视图模板目录绝对路径@pgo
PGO框架import路径
使用SetAlias/GetAlias设置和解析别名字符串,例如:
GetAlias("@runtime/info.log")
会将@runtime替换成实际的运行目录
--env production
, 指定程序的环境配置目录,默认为production--cmd /foo/bar
, 指定程序为命令行模式,并运行指定命令,默认为WEB模式--base /base/path
, 指定基础目录,默认为项目根目录,通常在单测时需要指定