chore: sync
This commit is contained in:
60
SproutWorkCollect-Backend-Golang/internal/config/dotenv.go
Normal file
60
SproutWorkCollect-Backend-Golang/internal/config/dotenv.go
Normal file
@@ -0,0 +1,60 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func loadDotEnv() {
|
||||
filename := ".env.local"
|
||||
if isProductionEnv() {
|
||||
filename = ".env.production.local"
|
||||
}
|
||||
|
||||
loadDotEnvFile(filename)
|
||||
}
|
||||
|
||||
func isProductionEnv() bool {
|
||||
for _, key := range []string{"SPROUTWORKCOLLECT_ENV", "ENV", "GIN_MODE"} {
|
||||
if v := strings.ToLower(strings.TrimSpace(os.Getenv(key))); v != "" {
|
||||
return v == "production" || v == "prod" || v == "release"
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func loadDotEnvFile(filename string) {
|
||||
data, err := os.ReadFile(filename)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
lines := strings.Split(string(data), "\n")
|
||||
for _, line := range lines {
|
||||
trimmed := strings.TrimSpace(line)
|
||||
if trimmed == "" || strings.HasPrefix(trimmed, "#") {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(trimmed, "export ") {
|
||||
trimmed = strings.TrimSpace(strings.TrimPrefix(trimmed, "export "))
|
||||
}
|
||||
key, value, ok := strings.Cut(trimmed, "=")
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
key = strings.TrimSpace(key)
|
||||
value = strings.TrimSpace(value)
|
||||
if key == "" {
|
||||
continue
|
||||
}
|
||||
if len(value) >= 2 {
|
||||
if (value[0] == '"' && value[len(value)-1] == '"') || (value[0] == '\'' && value[len(value)-1] == '\'') {
|
||||
value = value[1 : len(value)-1]
|
||||
}
|
||||
}
|
||||
if _, exists := os.LookupEnv(key); exists {
|
||||
continue
|
||||
}
|
||||
_ = os.Setenv(key, value)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user