env

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 4, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Package env 提供独立于启动方式的应用运行环境,供 HTTP、命令行等应用复用。 本包依赖标准库和 netx,不读取配置文件;配置加载和组件初始化由上层负责。

启动入口准备好配置和已存在且可列举、可遍历的目录后调用(需导入 github.com/bpcoder16/pixiu/infra/env):

if err := env.Init(env.Config{
    AppName:       "example-cmd",
    RunMode:       env.RunModeRelease,
    TimeLocation:  "Asia/Shanghai",
    ConfigDirPath: "/etc/example-cmd",
    LocalIP:       "192.0.2.10",
}); err != nil {
    panic(err)
}
_ = env.AppName()
_ = env.RunMode()
_ = env.TimeLocation()
_ = env.ConfigDirPath()
_ = env.LocalIP()
_ = env.RootDirPath()

AppName 不能为空或全为空白;RunMode 只接受 debug、test、release; TimeLocation 必填并通过 time.LoadLocation 解析,不内嵌时区数据库。 Config.ConfigDirPath 由调用方提供,必须是已存在且当前进程可列举、可遍历的绝对目录, 校验后原样保存,不清理路径,不从配置文件解析。符号链接校验其目标目录; 只试读一个目录条目验证列举权限,空目录有效;不要求目录可写, 不递归检查子目录或文件内容读取权限。后续文件访问仍由使用方处理错误。 目录关闭失败会合并到校验错误中并保留错误链,不发布环境。 LocalIP 可选,非空时必须是 IPv4 或 IPv6 地址并原样保存;空字符串调用 netx.LocalIPv4 查询,失败后调用 netx.LocalIPv6,均失败时保留空值,不阻止初始化。 自动选择遵循 netx 的网卡筛选规则, 不保证是主网卡或默认出站地址。补齐值只保存到环境快照,不修改输入配置。 依赖非空 IP 的应用应显式配置或在初始化后检查 LocalIP()。 RootDirPath 在 Init 时通过 os.Getwd 自动获取工作目录绝对路径,不需要配置; 获取失败不发布环境。初始化后切换工作目录不会更新该快照。

全部校验成功后原子发布环境快照,并发初始化只有一次成功;任何启动入口 再次初始化都返回 ErrAlreadyInitialized。校验失败不发布环境,允许修正后重试。 初始化前调用读取方法会 panic,成功后可并发读取。修改输入配置不会更新环境。 本包不修改 time.Local,不提供重置或热更新,不初始化其他组件。 接入 biz/bootstrap 时,由其在日志初始化前将 time.Local 设置为 TimeLocation()。

Index

Constants

View Source
const (
	RunModeDebug   = "debug"
	RunModeTest    = "test"
	RunModeRelease = "release"
)

应用支持的运行模式,由具体启动流程决定各模式的行为。

Variables

View Source
var ErrAlreadyInitialized = errors.New("env: environment is already initialized")

ErrAlreadyInitialized 表示进程环境已由某个启动入口初始化,不能重复发布。

Functions

func AppName

func AppName() string

AppName 返回启动时的应用名称;环境尚未初始化时 panic。

func ConfigDirPath

func ConfigDirPath() string

ConfigDirPath 返回初始化时传入的配置目录原值;环境尚未初始化时 panic。

func Init

func Init(cfg Config) error

Init 校验配置并一次性发布进程环境,供 HTTP、命令行等启动入口复用。 ConfigDirPath 必须为已存在且当前进程可列举、可遍历的绝对目录,校验后原样保存。 不清理路径,不要求目录可写,不递归检查子目录或文件内容读取权限。失败不改变已有环境。 LocalIP 非空时校验格式,空值通过 netx 先查询本机 IPv4,失败后查询 IPv6;均失败时保持为空。 RootDirPath 自动保存 Init 时的工作目录绝对路径;获取失败返回错误。 并发调用仅一次成功;成功后再次调用返回 ErrAlreadyInitialized。不修改 time.Local。

func LocalIP

func LocalIP() string

LocalIP 返回初始化时指定或查询得到的 IP 快照;IPv4、IPv6 查询均失败时为空,环境尚未初始化时 panic。

func RootDirPath

func RootDirPath() string

RootDirPath 返回 Init 时的工作目录绝对路径快照;环境尚未初始化时 panic。

func RunMode

func RunMode() string

RunMode 返回启动时的运行模式;环境尚未初始化时 panic。

func TimeLocation

func TimeLocation() *time.Location

TimeLocation 返回解析后的应用时区,不修改进程时区;环境尚未初始化时 panic。

Types

type Config

type Config struct {
	AppName       string `mapstructure:"appName"`
	RunMode       string `mapstructure:"runMode"`
	TimeLocation  string `mapstructure:"timeLocation"`
	ConfigDirPath string `mapstructure:"-"`
	LocalIP       string `mapstructure:"localIP"`
}

Config 定义必填的应用名称、运行模式和时区,以及可选的 LocalIP。 LocalIP 非空时校验 IP 格式,空值通过 netx 先查询本机 IPv4,失败后查询 IPv6,均失败时保持为空。 ConfigDirPath 由调用方提供,必须是已存在且当前进程可列举、可遍历的绝对目录,原样保存。 该字段不从配置文件解析,不要求目录可写,不递归检查子目录或文件内容读取权限。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL