为了改进这一点,我编写了一个自定义的Go包,它修复了膳绫擎的所有问题,并供给了一个可以轻松修改struct标签的每个方面的API。
这个包被称为 structtag ,并且可以大年夜 github.com/fatih/structtag 获取到。这个包许可我们以一种整洁的方法 解析和修改标签 。以下是一个完全的可工作的示例,复制/粘贴并自行测验测验下:
我们起首来看看 构造体标签的定义 是什么,之后我们会进修所有的部分,以及它们若何组合在一路,大年夜而构建这个对象。
- package main
- import (
- "fmt"
- "github.com/fatih/structtag"
- )
- func main() {
- tag := `json:"foo,omitempty,string" xml:"foo"`
- // parse the tag
- tags, err := structtag.Parse(string(tag))
- if err != nil {
- panic(err)
- }
- // iterate over all tags
- for _, t := range tags.Tags() {
- fmt.Printf("tag: %+v\n", t)
- }
- // get a single tag
- jsonTag, err := tags.Get("json")
- if err != nil {
- panic(err)
- }
- // change existing tag
- jsonTag.Name = "foo_bar"
- jsonTag.Options = nil
- tags.Set(jsonTag)
- // add new tag
- tags.Set(&structtag.Tag{
- Key: "hcl",
- Name: "foo",
- Options: []string{"squash"},
- })
- // print the tags
- fmt.Println(tags) // Output: json:"foo_bar" xml:"foo" hcl:"foo,squash"
- }
既然我们已经知道若何解析一个struct标签了,以及修改它或创建一个新的,如今是时刻来修改一个有效的Go源文件了。在膳绫擎的示例中,标签已经存在了,然则若何大年夜现有的Go构造中获取标签呢?
推荐阅读
前人有云,“一言既出,驷马难追”,可见对说出口的话,是多么看重。可是,人总有说错话的时刻啊!为懂得决“手滑”的懊末路,微信在5.3.1.16版本中上线了“微信撤回”的>>>详细阅读
本文标题:用Go语言编写一门工具的终极指南
地址:http://www.17bianji.com/lsqh/38247.html
1/2 1