作家
登录

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

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

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

第二部分定义了若何选择一个构造体及其字段。有多种办法可以做到这一点。我们可以经由过程它的偏移(光标地位)、构造名称,单行(仅指定字段)或一系列行来定义它。最后,我们老是须要获得肇端行号。例如鄙人面的例子中,你可以看到一个例子,我们用它的名字来选择构造体,然后提取肇端行号,以便我们可以选择精确的字段:

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

而编辑器最好应用 字节偏移量 。例如下面你可以看到我们的光标刚好在“Port”字段名称之后,大年夜那边我们可以很轻易地获得肇端行号:

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

config设备中的 第三 部分实际上是一个到我们的 structtagpackage的 一对一的映射。它根本上许可我们在攫取字段后将设备传递给structtag包。如你所知,structtag包许可我们解析一个struct标签并在各个部分进行修改。然则,它不会覆写或更新构造体的域值。

我们该若何获得设备呢? 我们只需应用flag包,然后为设备中的每个字段创建一个标记,然后给他们赋值。举个例子:

  1. flagFile := flag.String("file""""Filename to be parsed"
  2. cfg := &config{ 
  3.     file: *flagFile, 

我们对 设备中的每个字段 履行雷同操作。相干完全的列表请查看gomodifytag的当前master分支上的 flag 定义。

一旦我们有了设备,我们就可以做一些根本的验证了:

  1. func main() { 
  2.     cfg := config{ ... } 
  3.  
  4.     err := cfg.validate() 
  5.     if err != nil { 
  6.         log.Fatalln(err) 
  7.     } 
  8.  
  9.     // continue parsing 
  10.  
  11. // validate validates whether the config is valid or not 
  12. func (c *config) validate() error { 
  13.     if c.file == "" { 
  14.         return errors.New("no file is passed"
  15.     } 
  16.  
  17.     if c.line == "" && c.offset == 0 && c.structName == "" { 
  18.         return errors.New("-line, -offset or -struct is not passed"
  19.     } 
  20.  
  21.     if c.line != "" && c.offset != 0 || 
  22.         c.line != "" && c.structName != "" || 
  23.         c.offset != 0 && c.structName != 

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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