[Go Package] 关于 gin 的三种 Mode 选择

3,184 阅读1分钟

一、结论

gin.SetMode(utils.AppMode)

在初始化本路由的时候使用,从源码可看出,通过给变量ginMode赋值的方式提供了三种模式:
DebugMode
ReleaseMode
TestMode

// SetMode sets gin mode according to input string.
func SetMode(value string) {
   
   ...

   switch value {
   case DebugMode:
      ginMode = debugCode
   case ReleaseMode:
      ginMode = releaseCode
   case TestMode:
      ginMode = testCode
   default:
      panic("gin mode unknown: " + value + " (available mode: debug release test)")
   }

   modeName = value
}

在 Github 上 Gin 的 issue 中有回复:

With "debug" mode, Gin prints some extra debug information.
Under development, use "debug" mode, which is the default mode.
In production, use "release" mode.

You can just ignore "test" mode, which does not mean much.

总之,DebugModeReleaseMode多了一些额外的错误信息,生产环境不需要这些信息。而TestModegin用于自己的单元测试,用来快速开关DebugMode。对其它开发者没什么意义。

参考

二、gin 源码探究(可以不看)

gin通过一个简单的函数指出当前处于什么模式:

func IsDebugging() bool {
   return ginMode == debugCode
}

通过跟踪这个IsDebugging(),判断不同的 Mode 有什么差异: image.png 可以看到主要集中在debug.gogin.go

PS:SetMode()应该声明在gin.New()前,否则配置无法更新。

code.png