基本逻辑完成
This commit is contained in:
69
leaf/mode.go
Normal file
69
leaf/mode.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package leaf
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"io"
|
||||
"os"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
const EnvLeafMode = "LEAF_MODE"
|
||||
|
||||
const (
|
||||
// DebugMode indicates gin mode is debug.
|
||||
DebugMode = "debug"
|
||||
// ReleaseMode indicates gin mode is release.
|
||||
ReleaseMode = "release"
|
||||
// TestMode indicates gin mode is test.
|
||||
TestMode = "test"
|
||||
)
|
||||
|
||||
const (
|
||||
debugCode = iota
|
||||
releaseCode
|
||||
testCode
|
||||
)
|
||||
|
||||
var DefaultWriter io.Writer = os.Stdout
|
||||
|
||||
var DefaultErrorWriter io.Writer = os.Stderr
|
||||
|
||||
var leafMode int32 = debugCode
|
||||
var modeName atomic.Value
|
||||
|
||||
func init() {
|
||||
mode := os.Getenv(EnvLeafMode)
|
||||
SetMode(mode)
|
||||
}
|
||||
|
||||
// SetMode sets gin mode according to input string.
|
||||
func SetMode(value string) {
|
||||
if value == "" {
|
||||
if flag.Lookup("test.v") != nil {
|
||||
value = TestMode
|
||||
} else {
|
||||
value = DebugMode
|
||||
}
|
||||
}
|
||||
|
||||
switch value {
|
||||
case DebugMode, "":
|
||||
atomic.StoreInt32(&leafMode, debugCode)
|
||||
case ReleaseMode:
|
||||
atomic.StoreInt32(&leafMode, releaseCode)
|
||||
case TestMode:
|
||||
atomic.StoreInt32(&leafMode, testCode)
|
||||
default:
|
||||
panic("leaf mode unknown: " + value + " (available mode: debug release test)")
|
||||
}
|
||||
modeName.Store(value)
|
||||
}
|
||||
|
||||
func IsDebugging() bool {
|
||||
return atomic.LoadInt32(&leafMode) == debugCode
|
||||
}
|
||||
|
||||
// Mode returns current gin mode.
|
||||
func Mode() string {
|
||||
return modeName.Load().(string)
|
||||
}
|
||||
Reference in New Issue
Block a user