我真的会用flag包吗?

jan-bar · · 874 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

### 1.发现 平时比较习惯用go的flag包,但都是简单类型,有时候处理一些复杂类型时基本就是用简单类型然后内部搞一些操作检查。看了flag源码发现其实可以自定义类型的。请看下面代码: ```go package main import ( "encoding/json" "flag" "fmt" "strings" ) func main() { var m MyType flag.Var(&m, "m", "MyType") var s1 SliceString flag.Var(&s1, "s1", "s1 use [,]") s2 := SliceString{Sep: "|"} flag.Var(&s2, "s2", "s2 use [|]") flag.Parse() fmt.Printf("%#v\n", m.Get()) fmt.Printf("%#v\n", s1.Get()) fmt.Printf("%#v\n", s2.Get()) } type MyType struct { A string `json:"a"` B int `json:"b"` C bool `json:"c"` } func (s *MyType) Get() MyType { return *s } func (s *MyType) Set(set string) error { return json.Unmarshal([]byte(set), s) } func (s *MyType) String() string { byt, _ := json.Marshal(*s) return string(byt) } type SliceString struct { S, Sep string } func (s *SliceString) Get() []string { sep := "," if s.Sep != "" { sep = s.Sep } return strings.Split(s.S, sep) } func (s *SliceString) Set(set string) error { s.S = set return nil } func (s *SliceString) String() string { return s.S } ``` 当执行:.\app -m "{\"A\":\"abc\",\"B\":123,\"C\":true}" -s1 "abc,123,def" -s2 "xyz|wer|cvb" 下面是运行结果: > main.MyType{A:"abc", B:123, C:true} > []string{"abc", "123", "def"} > []string{"xyz", "wer", "cvb"}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

874 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传