Files
bulma/flag/textvar_flag.go
T

63 lines
1.4 KiB
Go

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))
}