mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 01:55:35 +08:00
47 lines
1.4 KiB
Markdown
47 lines
1.4 KiB
Markdown
# 10.4 带标签的结构体
|
||
|
||
结构体中的字段除了有名字和类型外,还可以有一个可选的标签 (tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。标签的内容不可以在一般的编程中使用,只有包 `reflect` 能获取它。我们将在下一章([第 11.10 节](11.10.md)中深入的探讨 `reflect` 包,它可以在运行时自省类型、属性和方法,比如:在一个变量上调用 `reflect.TypeOf()` 可以获取变量的正确类型,如果变量是一个结构体类型,就可以通过 Field 来索引结构体的字段,然后就可以使用 Tag 属性。
|
||
|
||
|
||
示例 10.7 [struct_tag.go](examples/chapter_10/struct_tag.go):
|
||
|
||
```go
|
||
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"reflect"
|
||
)
|
||
|
||
type TagType struct { // tags
|
||
field1 bool "An important answer"
|
||
field2 string "The name of the thing"
|
||
field3 int "How much there are"
|
||
}
|
||
|
||
func main() {
|
||
tt := TagType{true, "Barak Obama", 1}
|
||
for i := 0; i < 3; i++ {
|
||
refTag(tt, i)
|
||
}
|
||
}
|
||
|
||
func refTag(tt TagType, ix int) {
|
||
ttType := reflect.TypeOf(tt)
|
||
ixField := ttType.Field(ix)
|
||
fmt.Printf("%v\n", ixField.Tag)
|
||
}
|
||
```
|
||
|
||
输出:
|
||
|
||
An important answer
|
||
The name of the thing
|
||
How much there are
|
||
|
||
## 链接
|
||
|
||
- [目录](directory.md)
|
||
- 上一节:[使用自定义包中的结构体](10.3.md)
|
||
- 下一节:[匿名字段和内嵌结构体](10.5.md)
|