Files
bulma/flag/validate_flag.go
T

59 lines
1.1 KiB
Go

package main
import (
"flag"
"fmt"
"os"
)
// PortValue 自定义端口类型,实现flag.Value接口
type PortValue int
func (p *PortValue) Set(s string) error {
var port int
_, err := fmt.Sscanf(s, "%d", &port)
if err != nil || port < 1 || port > 65535 {
return fmt.Errorf("非法端口,必须为1-65535整数")
}
*p = PortValue(port)
return nil
}
func (p *PortValue) String() string {
return fmt.Sprintf("%d", *p)
}
// EnvValue 枚举环境校验类型
type EnvValue string
func (e *EnvValue) Set(s string) error {
if s != "dev" && s != "prod" {
return fmt.Errorf("仅支持 dev/prod 环境")
}
*e = EnvValue(s)
return nil
}
func (e *EnvValue) String() string {
return string(*e)
}
func main() {
var port PortValue
var env EnvValue
flag.Var(&port, "port", "服务端口 1-65535")
flag.Var(&env, "env", "运行环境 dev/prod")
config := flag.String("config", "", "配置文件路径(必填)")
flag.Parse()
// 后置非空校验
if *config == "" {
fmt.Println("错误:config 参数不能为空")
flag.Usage()
os.Exit(1)
}
fmt.Printf("环境:%s,端口:%d,配置:%s\n", env, port, *config)
}