59 lines
1.1 KiB
Go
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)
|
|
}
|