Files
the-way-to-go_ZH_CN/eBook/10.4.md
2016-03-15 12:34:44 +08:00

46 lines
1.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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)