mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 05:11:49 +08:00
auto commit
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
下面的例子中,main.go 使用了一个结构体,它来自 struct_pack 下的包 structPack。
|
||||
|
||||
示例 10.5 structPack.go:
|
||||
示例 10.5 [structPack.go](examples/chapter_10/struct_pack/structPack.go):
|
||||
|
||||
```go
|
||||
package structPack
|
||||
|
@@ -1,8 +1,8 @@
|
||||
# 10.4 带标签的结构体
|
||||
|
||||
结构体中的字段除了有名字和类型外,还可以有一个可选的标签(tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。标签的内容不可以在一般的编程中使用,只有包 `reflect` 能获取它。我们将在下一章(第 11.10 节)中深入的探讨 `reflect`包,它可以在运行时自省类型、属性和方法,比如:在一个变量上调用 `reflect.TypeOf()` 可以获取变量的正确类型,如果变量是一个结构体类型,就可以通过 Field 来索引结构体的字段,然后就可以使用 Tag 属性。
|
||||
结构体中的字段除了有名字和类型外,还可以有一个可选的标签(tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。标签的内容不可以在一般的编程中使用,只有包 `reflect` 能获取它。我们将在下一章(第 [11.10 节](11.10.md))中深入的探讨 `reflect`包,它可以在运行时自省类型、属性和方法,比如:在一个变量上调用 `reflect.TypeOf()` 可以获取变量的正确类型,如果变量是一个结构体类型,就可以通过 Field 来索引结构体的字段,然后就可以使用 Tag 属性。
|
||||
|
||||
示例 10.7 struct_tag.go:
|
||||
示例 10.7 [struct_tag.go](examples/chapter_10/struct_tag.go):
|
||||
|
||||
```go
|
||||
package main
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
考虑如下的程序:
|
||||
|
||||
示例 10.8 structs_anonymous_fields.go:
|
||||
示例 10.8 [structs_anonymous_fields.go](examples/chapter_10/structs_anonymous_fields.go):
|
||||
|
||||
```go
|
||||
package main
|
||||
@@ -64,7 +64,7 @@ func main() {
|
||||
|
||||
另外一个例子:
|
||||
|
||||
示例 10.9 embedd_struct.go:
|
||||
示例 10.9 [embedd_struct.go](examples/chapter_10/embedd_struct.go):
|
||||
|
||||
```go
|
||||
package main
|
||||
@@ -100,7 +100,7 @@ func main() {
|
||||
|
||||
当两个字段拥有相同的名字(可能是继承来的名字)时该怎么办呢?
|
||||
|
||||
1. 外层名字会覆盖内层名字(但是两者的内存空间都保留),这提供了一种重载字段或方法的方式
|
||||
1. 外层名字会覆盖内层名字(但是两者的内存空间都保留),这提供了一种重载字段或方法的方式;
|
||||
2. 如果相同的名字在同一级别出现了两次,如果这个名字被程序使用了,将会引发一个错误(不使用没关系)。没有办法来解决这种问题引起的二义性,必须由程序员自己修正。
|
||||
|
||||
例子:
|
||||
|
Reference in New Issue
Block a user