goProject/.svn/pristine/76/769701ab5be5012cb834c3294f238aa09f8ed694.svn-base
2025-01-06 16:21:36 +08:00

417 lines
8.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// ************************************
// @package: app_environment
// @description: 模拟进程级别的环境变量功能
// 注意此文件非线程安全请注意使用设计上是在init的过程中存放在运行过程中只读取
// @author: byron
// @revision history:
// @create date: 2022-01-25 16:54:47
// ************************************
package app_environment
import (
"encoding/json"
"errors"
"fmt"
"strconv"
)
var (
kv map[string]string
)
func init() {
kv = make(map[string]string)
}
// Reset
// @description: 重置环境变量
// parameter:
// @kvmap:
// return:
// @error:
func Reset(kvmap map[string]string) error {
if kvmap == nil {
return fmt.Errorf("app_environment.Reset 不允许使用nil map做参数")
}
kv = kvmap
return nil
}
// Set
// @description: 设置环境变量如果存在会返回error如果要覆盖请使用 SetForCover 方法
// parameter:
// @k:key
// @v:value
// return:
// @error:如果已经存在则返回error
func Set(k, v string) error {
if _, eixsts := kv[k]; eixsts {
return errors.New(fmt.Sprintf("已经存在k=%s的缓存", k))
}
kv[k] = v
return nil
}
// SetMap
// @description: 设置环境变量如果存在会返回error如果要覆盖请使用 SetForCoverMap 方法
// parameter:
// @kvmap:
// return:
// @error:
func SetMap(kvmap map[string]string) error {
for k, v := range kvmap {
if err := Set(k, v); err != nil {
return err
}
}
return nil
}
// SetForCover
// @description: 设置环境变量,如果存在,则覆盖
// parameter:
// @k:key
// @v:value
// return:
func SetForCover(k, v string) {
kv[k] = v
}
// SetForCoverMap
// @description: 设置环境变量,如果存在,则覆盖
// parameter:
// @kvmap:
// return:
func SetForCoverMap(kvmap map[string]string) {
for k, v := range kvmap {
SetForCover(k, v)
}
}
// SetForNoExists
// @description: 如果不存在,则设置
// parameter:
// @k:key
// @v:value
// return:
func SetForNoExists(k, v string) {
if _, eixsts := kv[k]; eixsts {
return
}
kv[k] = v
}
// SetForNoExistsMap
// @description: 如果不存在,则设置
// parameter:
// @kvmap:要设置的字典
// return:
func SetForNoExistsMap(kvmap map[string]string) {
for k, v := range kvmap {
SetForNoExists(k, v)
}
}
// GetAll
// @description: 获取所有的环境变量
// parameter:
// return:
// @map[string]string:环境变量内容
func GetAll() map[string]string {
tempKv := make(map[string]string, len(kv))
for k, v := range kv {
tempKv[k] = v
}
return tempKv
}
// Get
// @description: 获取环境变量
// parameter:
// @k:配置项
// return:
// @string:value
// @bool:是否存在对应的值
func Get(k string) (string, bool) {
v, exists := kv[k]
return v, exists
}
// GetOrDefault
// @description: 获取环境变量,未配置情况下使用默认值
// parameter:
// @k:配置项
// @defaultValue:默认值
// return:
// @string:结果值
func GetOrDefault(k string, defaultValue string) string {
v, ok := Get(k)
if !ok {
return defaultValue
}
return v
}
// GetInt
// @description: 获取环境变量
// parameter:
// @k:key
// return:
// @int:value
// @bool:是否存在对应的值
// @error:配置值解析失败时返回
func GetInt(k string) (int, bool, error) {
v, isok := Get(k)
if isok == false {
return 0, false, nil
}
i, err := strconv.Atoi(v)
if err != nil {
return 0, true, err
}
return i, true, nil
}
// GetIntOrDefault
// @description: 获取环境变量,未配置情况下使用默认值
// parameter:
// @k:配置项
// @defaultValue:默认值
// return:
// @int:结果值
// @error:配置值解析失败时返回
func GetIntOrDefault(k string, defaultValue int) (int, error) {
val, ok, err := GetInt(k)
if err != nil || !ok {
return defaultValue, err
}
return val, nil
}
// GetInt32
// @description: 获取环境变量
// parameter:
// @k:key
// return:
// @int:value
// @bool:是否存在对应的值
// @error:配置值解析失败时返回
func GetInt32(k string) (int32, bool, error) {
v, isok := Get(k)
if isok == false {
return 0, false, nil
}
i, err := strconv.ParseInt(v, 10, 32)
if err != nil {
return 0, true, err
}
return int32(i), true, nil
}
// GetInt32OrDefault
// @description: 获取环境变量,未配置情况下使用默认值
// parameter:
// @k:配置项
// @defaultValue:默认值
// return:
// @int:结果值
// @error:配置值解析失败时返回
func GetInt32OrDefault(k string, defaultValue int32) (int32, error) {
val, ok, err := GetInt32(k)
if err != nil || !ok {
return defaultValue, err
}
return val, nil
}
// GetInt64
// @description: 获取环境变量
// parameter:
// @k:key
// return:
// @int64:value
// @bool:是否存在对应的值
// @error:过程是否出错
func GetInt64(k string) (int64, bool, error) {
v, isok := Get(k)
if isok == false {
return 0, false, nil
}
i64, err := strconv.ParseInt(v, 10, 64)
if err != nil {
return 0, true, err
}
return i64, true, nil
}
// GetInt64OrDefault
// @description: 获取环境变量,未配置情况下使用默认值
// parameter:
// @k:配置项
// @defaultValue:默认值
// return:
// @int:结果值
// @error:配置值解析失败时返回
func GetInt64OrDefault(k string, defaultValue int64) (int64, error) {
val, ok, err := GetInt64(k)
if err != nil || !ok {
return defaultValue, err
}
return val, nil
}
// GetFloat32
// @description: 获取环境变量
// parameter:
// @k:key
// return:
// @int64:value
// @bool:是否存在对应的值
// @error:过程是否出错
func GetFloat32(k string) (float32, bool, error) {
v, isok := Get(k)
if isok == false {
return 0, false, nil
}
f64, err := strconv.ParseFloat(v, 32)
if err != nil {
return 0, true, err
}
return float32(f64), true, nil
}
// GetFloat32OrDefault
// @description: 获取环境变量,未配置情况下使用默认值
// parameter:
// @k:配置项
// @defaultValue:默认值
// return:
// @int:结果值
// @error:配置值解析失败时返回
func GetFloat32OrDefault(k string, defaultValue float32) (float32, error) {
val, ok, err := GetFloat32(k)
if err != nil || !ok {
return defaultValue, err
}
return val, nil
}
// GetFloat64
// @description: 获取环境变量
// parameter:
// @k:key
// return:
// @int64:value
// @bool:是否存在对应的值
// @error:过程是否出错
func GetFloat64(k string) (float64, bool, error) {
v, isok := Get(k)
if isok == false {
return 0, false, nil
}
f64, err := strconv.ParseFloat(v, 64)
if err != nil {
return 0, true, err
}
return f64, true, nil
}
// GetFloat64OrDefault
// @description: 获取环境变量,未配置情况下使用默认值
// parameter:
// @k:配置项
// @defaultValue:默认值
// return:
// @int:结果值
// @error:配置值解析失败时返回
func GetFloat64OrDefault(k string, defaultValue float64) (float64, error) {
val, ok, err := GetFloat64(k)
if err != nil || !ok {
return defaultValue, err
}
return val, nil
}
// GetBool
// @description: 获取环境变量
// parameter:
// @k:key
// return:
// @bool:value
// @bool:是否存在对应的值
// @error:过程是否出错
func GetBool(k string) (bool, bool, error) {
v, isok := Get(k)
if isok == false {
return false, false, nil
}
i, err := strconv.ParseBool(v)
if err != nil {
return false, true, err
}
return i, true, nil
}
// GetBoolOrDefault
// @description: 获取环境变量,未配置情况下使用默认值
// parameter:
// @k:配置项
// @defaultValue:默认值
// return:
// @int:结果值
// @error:配置值解析失败时返回
func GetBoolOrDefault(k string, defaultValue bool) (bool, error) {
val, ok, err := GetBool(k)
if err != nil || !ok {
return defaultValue, err
}
return val, nil
}
// GetModel
// @description: 获取环境变量并将内容序列化到obj对象中返回
// parameter:
// @k:key
// @obj:value
// return:
// @bool:是否存在对应的值
// @error:过程是否出错
func GetModel(k string, obj interface{}) (bool, error) {
v, isok := Get(k)
if isok == false {
return false, nil
}
if err := json.Unmarshal([]byte(v), obj); err != nil {
return true, err
}
return true, nil
}