package main import ( "flag" "fmt" "time" ) // CustomTime 自定义时间类型,复用标准库文本序列化接口 type CustomTime time.Time // MarshalText 实现文本序列化(对应默认值展示) func (t CustomTime) MarshalText() ([]byte, error) { return []byte(time.Time(t).Format(time.RFC3339)), nil } // UnmarshalText 实现文本反序列化(参数解析核心) func (t *CustomTime) UnmarshalText(b []byte) error { parseTime, err := time.Parse(time.RFC3339, string(b)) if err != nil { return err } *t = CustomTime(parseTime) return nil } // 枚举类型示例:自定义运行模式 type RunMode string const ( ModeDev RunMode = "dev" ModeProd RunMode = "prod" ) func (m RunMode) MarshalText() ([]byte, error) { return []byte(m), nil } func (m *RunMode) UnmarshalText(b []byte) error { val := RunMode(b) if val != ModeDev && val != ModeProd { return fmt.Errorf("非法运行模式,仅支持 dev/prod") } *m = val return nil } func main() { // 1. 自定义时间参数 TextVar 绑定 var execTime CustomTime defaultTime := CustomTime(time.Now()) flag.TextVar(&execTime, "exec-time", defaultTime, "执行时间(RFC3339格式)") // 2. 自定义枚举参数 TextVar 绑定 var runMode RunMode flag.TextVar(&runMode, "mode", ModeDev, "运行模式 dev/prod") flag.Parse() fmt.Printf("运行模式:%s\n", runMode) fmt.Printf("执行时间:%s\n", time.Time(execTime).Format(time.RFC3339)) }