Go Echo 学习笔记(四)自定义组件


Echo 自定义组件

Echo 做为一个性能强大的 web 框架提供了非常丰富的自定义组件功能。

自定义日志信息

Echo 支付设置项目的调试信息是否进行显示:

e.Debug = true  // 开启调试模式
e.Debug = false // 关闭调试模式

同时可以利用 Echo 中的 Logger 结构体实现对调试信息的定制:

默认的日志的显示格式为json,只会显示 time、level、prefix、file、line 等信息:

{"time":"${time_rfc3339_nano}","level":"${level}","prefix":"${prefix}","file":"${short_file}","line":"${line}"}

可以利用 Echo#Logger.SetHeader(string) 方法来定制显示内容:

// .(*log.Logger)为接口类型断言,用来判断接口的类型
if l, ok := e.Logger.(*log.Logger); ok {
  l.SetHeader("${time_rfc3339} ${level}")
}

可以支持定制的类型有:

  • time_rfc3339
  • time_rfc3339_nano
  • level
  • prefix
  • long_file
  • short_file
  • line

Echo 中的日志信息的默认输出是 os.Stdout(标准输出),可以通过 Echo#Logger.SetOutput(io.Writer) 来指定相应的输出位置。例如可以将日志输出到文件以及对应的标准输出中:

logFile, err := os.OpenFile("./log/echo.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0755)
if err != nil {
	panic(err)
}
// 设置日志输出位置(文件以及终端)
e.Logger.SetOutput(io.MultiWriter(logFile, os.Stdout))

Echo 中默认的日志级别是 Error,可以通过 Echo#Logger.SetLevel(log.Lvl) 传入对应的日志级别(从低到高)来进行设置:

  • OFF
  • DEBUG
  • INFO
  • WARN
  • ERROR

自定义服务

Echo 使用 Echo#Start(addr string) 传入一个应用的路径(端口号)来启动一个 Web App,想要对 App Serevr 进行一些相应的定制就是需要使用 Echo#StartServer(server *http.Server) 传入一个 http.Server 对象来启动 App,在 http.Server 对象中完成 Server 的定制需求。

s := &http.Server{
  Addr:         ":1323",
  ReadTimeout:  20 * time.Minute,
  WriteTimeout: 20 * time.Minute,
}
e.Logger.Fatal(e.StartServer(s))

其中,支持自定义如下的内容:

HTTP/2 Cleartext Server

Echo#StartH2CServer(server *http.Server) 方法支持启动一个 HTTP2 的明文 Server App:

s := &http2.Server{
  MaxConcurrentStreams: 250,
  MaxReadFrameSize:     1048576,
  IdleTimeout:          10 * time.Second,
}
e.Logger.Fatal(e.StartH2CServer(":1323", s))

Startup Banner

Startup Banner 控制 Echo App 在启动的时候所显示的内容,默认的显示内容如下:

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.2.2
High performance, minimalist Go web framework
https://echo.labstack.com

可以通过 Echo#HideBanner 来隐藏该显示信息。

e.HideBanner = true // 关闭启动信息显示

Listener

Echo支持使用 Echo#*Listener 方法来修改当前 App 所使用的 Listener:

l, err := net.Listen("tcp", ":1323")
if err != nil {
  e.Logger.Fatal(err)
}
e.Listener = l
e.Logger.Fatal(e.Start(""))

HTTP/2

Echo 可以通过Echo#DisableHTTP2 来禁用:

e.DisableHTTP2 = true // 禁用http2协议

Read&Write Timeout

在自定义 Echo Server 的时候可以对请求以及响应的超市时间进行设置:

  • Echo#*Server#ReadTimeout:设置读取请求的最长时间;
  • Echo#*Server#WriteTimeout:设置写入响应的最长时间。
server := &http.Server{
	ReadTimeout: 60*time.Second,
	WriteTimeout: 60*time.Second,
}
e.Logger.Fatal(e.StartServer(server))

Validator

Echo#Validator注册一个用于请求数据的验证器,用来对请求的数据进行有效性验证。

Binder

Echo#Binder注册一个用于绑定请求有效负载的自定义绑定程序。

Renderer

Echo#Renderer注册一个用于模板渲染的渲染引擎。

HTTP Error Handler

Echo#HTTPErrorHandler注册一个自定义的 http 错误处理方法。