作家
登录

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

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

构造体的标签 值 (其内容,比如`json:"foo"`)并 不是官方标准的一部分 ,不过,存在一个非官方的规范,应用 reflect 包定义了其格局,这种办法也被 stdlib(例如 encoding/ json)包所采取。它是经由过程 reflect.StructTag 类型定义的:

膳绫擎代码履行以下操作:

  • 我们定义下场包含一个构造体的有效Go包的实例。
  • 我们应用 go/parser 包来解析这个字符串。解析器包也可以大年夜磁盘攫取文件(或全部包)。
  • 在我们解析之后,我们保存我们的节点(分派给变量文件)并查找由 *ast.StructType 定义的AST节点(拜见AST映像作为参考)。遍历树是经由过程ast.Inspect()函数完成的。它会遍历所有节点,直到它收到false值。这是异常便利的,因为它不须要知道每个节点。
  • 我们打印构造体的字段名称和构造标签。

我们如今可以完成 两件重要的工作了 ,起首,我们知道若何 解析一个 Go 源文件 并检索个中构造体的标签(经由过程go/parser)。其次,我们知道 若何解析 Go 构造体标签 ,并根据须要进行修改(经由过程 github.com/fatih/structtag )。

既然我们有了这些,我们可以经由过程应用这两个重要的代码片段开端构建我们的对象(名为 gomodifytags )。该对象应次序履行以下操作:

  • 获取设备,以辨认我们要修改哪个构造体
  • 根据设备查找和修改构造体
  • 输出结不雅

因为 gomodifytags 将重要由编辑器来履行,我们计算经由过程 CLI 标记传递设备信息。第二步包含多个步调,如解析文件、找到精确的构造体,然后修改构造(经由过程修改 AST 完成)。最后,我们将输出结不雅,或是按照原始的 Go 源文件或是某种自定义协定(如 JSON,稍后再说)。

以下是 gomodifytags 简化之后的重要功能:

用Go说话编写一门对象的最终指南

让我们开端具体解释每个步调。为了坚削发单,我将测验测验以萃取情势解释重要的部分。尽管一切都是一样的,一旦你读完了这篇博文,你将可以或许在无需任何指导的情况下通读全部源代码(你将会在本指南的最后找到所有资本)

让我们大年夜第一步开端,懂得若何 获取设备 。以下是我们的设备文件,个中包含所有的须要信息

  1. type config struct { 
  2.     // first section - input & output 
  3.     file     string 
  4.     modified io.Reader 
  5.     output   string 
  6.     write    bool 
  7.  
  8.     // second section - struct selection 
  9.     offset     int 
  10.     structName string 
  11.     line       string 
  12.     start, end int 
  13.  
  14.     // third section - struct modification 
  15.     remove    []string 
  16.     add       []string 
  17.     override  bool 
  18.     transform string 
  19.     sort      bool 
  20.     clear     bool 
  21.     addOpts    []string 
  22.     removeOpts []string 
  23.     clearOpt   bool 

它分为 三个 重要部分:

第一部分包含有关若何和哪个文件要读入的设备。这可所以本地文件体系的文件名,也可所以直接来自stdin的数据(重要用在编辑器中)。它还设置了若何输出结不雅(Go源文件或JSON情势),以及我们是否应当覆写文件,而不是输出到stdout中。


  推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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