gomodifytags
go get github.com/fatih/gomodifytags
对于 struct_demo.go:
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string Port int EnableLogs bool BaseDomain string Credentials struct { Username string Password string } }
|
针对整个结构体进行操作
gomodifytags -file struct_demo.go(文件名) -struct Server(结构体名) -add-tags json -w
(-w 是直接改写之前的结构体)
则会自动加上json标签:
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string `json:"name"` Port int `json:"port"` EnableLogs bool `json:"enable_logs"` BaseDomain string `json:"base_domain"` Credentials struct { Username string `json:"username"` Password string `json:"password"` } `json:"credentials"` }
|
支持3种命名样式:
- snakecase: “BaseDomain” -> “base_domain”,蛇形命名法
- camelcase: “BaseDomain” -> “baseDomain”,驼峰命名法
- lispcase: “BaseDomain” -> “base-domain”
如再给该结构体添加一个驼峰格式的xml标签,但不要直接改写,输出到命令行即可:
gomodifytags -file demo.go -struct Server -add-tags xml -transform camelcase
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string `json:"name" xml:"name"` Port int `json:"port" xml:"port"` EnableLogs bool `json:"enable_logs" xml:"enableLogs"` BaseDomain string `json:"base_domain" xml:"baseDomain"` Credentials struct { Username string `json:"username" xml:"username"` Password string `json:"password" xml:"password"` } `json:"credentials" xml:"credentials"` }
|
给结构体添加一个”validate:gt=1”和”scope:read-only”标签:
gomodifytags -file struct_demo.go -struct Server -add-tags validate:gt=1,scope:read-only
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string `json:"name" validate:"gt=1" scope:"read-only"` Port int `json:"port" validate:"gt=1" scope:"read-only"` EnableLogs bool `json:"enable_logs" validate:"gt=1" scope:"read-only"` BaseDomain string `json:"base_domain" validate:"gt=1" scope:"read-only"` Credentials struct { Username string `json:"username" validate:"gt=1" scope:"read-only"` Password string `json:"password" validate:"gt=1" scope:"read-only"` } `json:"credentials" validate:"gt=1" scope:"read-only"` }
|
给之前的json标签,在字段名后 添加一个”omitempty”,并直接改写:
gomodifytags -file struct_demo.go -struct Server -add-tags json --add-options json=omitempty -w
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string `json:"name,omitempty"` Port int `json:"port,omitempty"` EnableLogs bool `json:"enable_logs,omitempty"` BaseDomain string `json:"base_domain,omitempty"` Credentials struct { Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` } `json:"credentials,omitempty"` }
|
gomodifytags -file struct_demo.go -struct Server -remove-options json=omitempty
移除刚刚添加的omitempty:
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string `json:"name"` Port int `json:"port"` EnableLogs bool `json:"enable_logs"` BaseDomain string `json:"base_domain"` Credentials struct { Username string `json:"username"` Password string `json:"password"` } `json:"credentials"` }
|
移除掉json标签:
gomodifytags -file struct_demo.go -struct Server -remove-tags json
1 2 3 4 5 6 7 8 9 10 11 12 13
| package main
type Server struct { Name string Port int EnableLogs bool BaseDomain string Credentials struct { Username string Password string } }
|
移除掉所有标签:
gomodifytags -file struct_demo.go -struct Server -clear-tags
移除所有标签的第一个值之后的所有内容,
gomodifytags -file struct_demo.go -struct Server -clear-options -w
如对于
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string `json:"name,omitempty" xml:"name,attr"` Port int `json:"port,omitempty" xml:"port,attr"` EnableLogs bool `json:"enable_logs,omitempty" xml:"enable_logs,attr"` BaseDomain string `json:"base_domain,omitempty" xml:"base_domain,attr"` Credentials struct { Username string `json:"username,omitempty" xml:"username,attr"` Password string `json:"password,omitempty" xml:"password,attr"` } `json:"credentials,omitempty" xml:"credentials,attr"` }
|
执行后变为:
1 2 3 4 5 6 7 8 9 10 11 12
| package main
type Server struct { Name string `json:"name" xml:"name"` Port int `json:"port" xml:"port"` EnableLogs bool `json:"enable_logs" xml:"enable_logs"` BaseDomain string `json:"base_domain" xml:"base_domain"` Credentials struct { Username string `json:"username" xml:"username"` Password string `json:"password" xml:"password"` } `json:"credentials" xml:"credentials"` }
|
针对结构体的某几行进行操作
gomodifytags -file struct_demo.go -line 8,11 -clear-tags json
gomodifytags -file struct_demo.go -line 6,7 -remove-tags json
gomodifytags -file struct_demo.go -line 2,7 -add-tags bson
gomodifytags -file struct_demo.go -offset 100 -add-tags bson
这几个命令完全可以”望文生义”,无需解释..
参考自 gomodifytags
原文链接: https://dashen.tech/2016/04/16/gomodifytags-好用的struct标签操作工具/
版权声明: 转载请注明出处.