基本逻辑完成

This commit is contained in:
2024-11-01 17:40:34 +08:00
commit f9b9beea4b
40 changed files with 1869 additions and 0 deletions

69
leaf/mode.go Normal file
View 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)
}