当前位置: 首页 > 知识库问答 >
问题:

Go中的标签有什么用处?

柯耀
2023-03-14
// A struct corresponding to the TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers.
struct {
  microsec  uint64 "field 1"
  serverIP6 uint64 "field 2"
  process   string "field 3"
}

共有1个答案

潘青青
2023-03-14

字段的标记允许您将元信息附加到字段,可以使用反射获取元信息。通常,它用于提供关于如何将结构字段编码为另一种格式或从另一种格式解码(或从html" target="_blank">数据库存储/检索)的转换信息,但您可以使用它来存储任何您想要的元信息,可以用于另一个包,也可以用于您自己。

正如reflect.structTag文档中提到的,按照惯例,标记字符串的值是一个以空格分隔的key:“value”对的列表,例如:

type User struct {
    Name string `json:"name" xml:"name"`
}

通常表示后续“value”所在的包,例如json键由encode/json包处理/使用。

如果要在“value”中传递多个信息,通常通过用逗号(',')分隔来指定,例如。

Name string `json:"name,omitempty" xml:"name"`

通常“value”的破折号('-')表示从进程中排除该字段(例如,在JSON的情况下,它表示不封送或取消封送该字段)。

我们可以使用反射(reflect包)访问struct字段的标记值。基本上,我们需要获取结构的type,然后可以使用type.field(i int)type.fieldByName(name string)查询字段。这些方法返回structfield值,该值描述/表示结构字段;而structfield.tagstructtag类型的值,它描述/表示标记值。

还有structTag.lookup()(在Go1.7中添加),它“与get()类似,但将不包含给定键的标记与将空字符串与给定键相关联的标记区分开来”。

让我们来看一个简单的例子:

type User struct {
    Name  string `mytag:"MyName"`
    Email string `mytag:"MyEmail"`
}

u := User{"Bob", "bob@mycompany.com"}
t := reflect.TypeOf(u)

for _, fieldName := range []string{"Name", "Email"} {
    field, found := t.FieldByName(fieldName)
    if !found {
        continue
    }
    fmt.Printf("\nField: User.%s\n", fieldName)
    fmt.Printf("\tWhole tag value : %q\n", field.Tag)
    fmt.Printf("\tValue of 'mytag': %q\n", field.Tag.Get("mytag"))
}

输出(在围棋游乐场上试试):

Field: User.Name
    Whole tag value : "mytag:\"MyName\""
    Value of 'mytag': "MyName"

Field: User.Email
    Whole tag value : "mytag:\"MyEmail\""
    Value of 'mytag': "MyEmail"
    null
 类似资料:
  • 问题内容: 在Go语言规范中,它提到了标签的简要概述: 字段声明后可以跟一个可选的字符串文字标签,该标签成为相应字段声明中所有字段的属性。这些标签通过反射界面可见,但在其他情况下将被忽略。 这是IMO的简短解释,我想知道是否有人可以为我提供这些标签的用途? 问题答案: 字段标签允许您将元信息附加到可以使用反射获取的字段上。通常,它用于提供有关如何将结构域编码为另一种格式(或从另一种格式存储(或从数

  • 在Go语言规范中,提到了对标签的简要概述: 字段声明之后可能会有一个可选的字符串文字标记,该标记将成为相应字段声明中所有字段的属性。标记通过反射界面可见,但在其他情况下被忽略。 这是一个非常简短的解释,我想知道是否有人能给我提供这些标签的用途?

  • 本文向大家介绍noscript标签有什么作用?相关面试题,主要包含被问及noscript标签有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 如果浏览器不支持js,noscript会帮助我们显示一些信息 https://stackoverflow.com/questions/2170484/shouldnt-we-use-noscript-element

  • 本文向大家介绍说说HTML中的标签有什么作用?相关面试题,主要包含被问及说说HTML中的标签有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 供浏览器识别这是一个HTML文档 标识了HTML文档的头尾 是HTML文件的根元素 H5之后可以通过设置html的manifest属性来实现离线缓存 可以通过设置lang属性来设置页面的语言,常用的有zh和en

  • 问题内容: 我开始使用诊断CSS样式表,例如 建议的规则之一突出显示类型为Submit的输入标签,并建议将其用作更具语义的解决方案。您遇到过的类型提交(例如与浏览器兼容性)的优缺点是什么? 明确地说,我了解的规格,它具有定义的开始和结束,可以包含各种元素,而输入是单线态,不能包含任何东西。我实质上想知道的是它是否损坏。我想知道当前按钮的可用性。不幸的是,下面的第一个答案似乎确实暗示它不能用于表格之

  • 本文向大家介绍html标签中的lang属性有什么作用?相关面试题,主要包含被问及html标签中的lang属性有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 根据lang属性来设定不同语言的css样式,或者字体 告诉搜索引擎做精确的识别 让语法检查程序做语言识别 帮助翻译工具做识别 帮助网页阅读程序做识别等等