作家
登录

用Go语言编写一门工具的终极指南

作者: 来源: 2017-10-26 13:08:22 阅读次 我要评论

  • 我们不克不及从新 构建新的struct标签 。
  • 为了改进这一点,我编写了一个自定义的Go包,它修复了膳绫擎的所有问题,并供给了一个可以轻松修改struct标签的每个方面的API。

    这个包被称为 structtag ,并且可以大年夜 github.com/fatih/structtag 获取到。这个包许可我们以一种整洁的方法 解析和修改标签 。以下是一个完全的可工作的示例,复制/粘贴并自行测验测验下:

    我们起首来看看 构造体标签的定义 是什么,之后我们会进修所有的部分,以及它们若何组合在一路,大年夜而构建这个对象。

    1. package main 
    2.  
    3. import ( 
    4.     "fmt" 
    5.  
    6.     "github.com/fatih/structtag" 
    7. ) 
    8.  
    9. func main() { 
    10.     tag := `json:"foo,omitempty,string" xml:"foo"` 
    11.  
    12.     // parse the tag 
    13.     tags, err := structtag.Parse(string(tag)) 
    14.     if err != nil { 
    15.         panic(err) 
    16.     } 
    17.  
    18.     // iterate over all tags 
    19.     for _, t := range tags.Tags() { 
    20.         fmt.Printf("tag: %+v\n", t) 
    21.     } 
    22.  
    23.     // get a single tag 
    24.     jsonTag, err := tags.Get("json") 
    25.     if err != nil { 
    26.         panic(err) 
    27.     } 
    28.  
    29.     // change existing tag 
    30.     jsonTag.Name = "foo_bar" 
    31.     jsonTag.Options = nil 
    32.     tags.Set(jsonTag) 
    33.  
    34.     // add new tag 
    35.     tags.Set(&structtag.Tag{ 
    36.         Key:     "hcl", 
    37.         Name:    "foo", 
    38.         Options: []string{"squash"}, 
    39.     }) 
    40.  
    41.     // print the tags 
    42.     fmt.Println(tags) // Output: json:"foo_bar" xml:"foo" hcl:"foo,squash" 
    43. } 

    既然我们已经知道若何解析一个struct标签了,以及修改它或创建一个新的,如今是时刻来修改一个有效的Go源文件了。在膳绫擎的示例中,标签已经存在了,然则若何大年夜现有的Go构造中获取标签呢?


      推荐阅读

      微信消息撤回为啥只有2分钟?恍然大悟

    前人有云,“一言既出,驷马难追”,可见对说出口的话,是多么看重。可是,人总有说错话的时刻啊!为懂得决“手滑”的懊末路,微信在5.3.1.16版本中上线了“微信撤回”的>>>详细阅读


    本文标题:用Go语言编写一门工具的终极指南

    地址:http://www.17bianji.com/lsqh/38247.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)