首次提交:初始化项目代码
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// PortRange 自定义端口范围类型,支持 min-max 格式
|
||||
type PortRange struct {
|
||||
Min int
|
||||
Max int
|
||||
}
|
||||
|
||||
// Set 实现Value接口,完成参数解析和合法性校验
|
||||
func (p *PortRange) Set(s string) error {
|
||||
parts := strings.Split(s, "-")
|
||||
if len(parts) != 2 {
|
||||
return fmt.Errorf("格式错误,端口范围格式必须为 minV-max")
|
||||
}
|
||||
|
||||
var minV, maxV int
|
||||
_, err1 := fmt.Sscanf(parts[0], "%d", &minV)
|
||||
_, err2 := fmt.Sscanf(parts[1], "%d", &maxV)
|
||||
if err1 != nil || err2 != nil {
|
||||
return fmt.Errorf("端口必须为整数")
|
||||
}
|
||||
|
||||
if minV < 1 || minV > 65535 || maxV < 1 || maxV > 65535 || minV > maxV {
|
||||
return fmt.Errorf("端口范围必须在1-65535之间,且min <= max")
|
||||
}
|
||||
|
||||
p.Min = minV
|
||||
p.Max = maxV
|
||||
return nil
|
||||
}
|
||||
|
||||
// String 实现Value接口,定义默认值与字符串展示
|
||||
func (p *PortRange) String() string {
|
||||
if p.Min == 0 && p.Max == 0 {
|
||||
return "1-65535"
|
||||
}
|
||||
return fmt.Sprintf("%d-%d", p.Min, p.Max)
|
||||
}
|
||||
|
||||
// Get 实现Getter接口,返回原始类型,支持类型断言
|
||||
func (p *PortRange) Get() any {
|
||||
return *p
|
||||
}
|
||||
|
||||
func main() {
|
||||
var portRange PortRange
|
||||
flag.Var(&portRange, "port-range", "端口范围,格式:min-max")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
fmt.Printf("有效端口范围:[%d, %d]\n", portRange.Min, portRange.Max)
|
||||
fmt.Printf("类型安全取值:%#v\n", portRange.Get().(PortRange))
|
||||
}
|
||||
Reference in New Issue
Block a user