|
|
@@ -12,7 +12,7 @@ type identifier struct {
|
|
|
|
|
|
`type T struct {a, b int}`也是合法的语法,它更适用于简单的结构体。
|
|
|
|
|
|
-这个结构体里的字段都有*名字*,像field1,field2等,如果字段在代码中从来也不会被用到,那么可以命名它为*_*。
|
|
|
+结构体里的字段都有*名字*,像field1,field2等,如果字段在代码中从来也不会被用到,那么可以命名它为*_*。
|
|
|
|
|
|
结构体的字段可以是任何类型,甚至是结构体本身(参考[10.5](10.5.md)),可以是函数或者接口(参考第11章)。可以声明结构体类型的一个变量,然后给它的字段像下面这样赋值:
|
|
|
|
|
|
@@ -282,19 +282,27 @@ func main() {
|
|
|
|
|
|
**练习**
|
|
|
|
|
|
-*练习 10.1* vcard.go:定义结构体Address和VCard,后者包含一个人的名字、地址编号、出生日期和图像,试着选择正确的数据类型。构建一个自己的vcard并打印它的内容。
|
|
|
+练习 10.1 vcard.go:
|
|
|
+
|
|
|
+定义结构体Address和VCard,后者包含一个人的名字、地址编号、出生日期和图像,试着选择正确的数据类型。构建一个自己的vcard并打印它的内容。
|
|
|
|
|
|
提示:
|
|
|
VCard必须包含住址,它应该以值类型还是以指针类型放在VCard中呢?
|
|
|
第二种会好点,因为它占用内存少。包含一个名字和两个指向地址的指针的Address结构体可以使用%v打印:
|
|
|
{Kersschot 0x126d2b80 0x126d2be0}
|
|
|
|
|
|
-*练习 10.2* 修改*persionext1.go*,使它的参数upPerson不是一个指针,解释下二者的区别。
|
|
|
+练习 10.2 persionext1.go:
|
|
|
+
|
|
|
+修改persionext1.go,使它的参数upPerson不是一个指针,解释下二者的区别。
|
|
|
|
|
|
-*练习 10.3* point.go:使用坐标X、Y定义一个二维Point结构体。同样地,对一个三维点使用它的极坐标定义一个Polar结构体。实现一个Abs()方法来计算一个Point表示的向量的长度,实现一个Scale方法,它将点的坐标乘以一个尺度因子(提示:使用math包里的Sqrt函数)( function Scale that multiplies the coordinates of a point with a scale
|
|
|
+练习 10.3 point.go:
|
|
|
+
|
|
|
+使用坐标X、Y定义一个二维Point结构体。同样地,对一个三维点使用它的极坐标定义一个Polar结构体。实现一个Abs()方法来计算一个Point表示的向量的长度,实现一个Scale方法,它将点的坐标乘以一个尺度因子(提示:使用math包里的Sqrt函数)( function Scale that multiplies the coordinates of a point with a scale
|
|
|
factor)。
|
|
|
|
|
|
-*练习 10.3* rectangle.go:定义一个Rectangle结构体,它的长和宽是int类型,并定义方法Area()和Primeter(),然后进行测试。
|
|
|
+练习 10.3 rectangle.go:
|
|
|
+
|
|
|
+定义一个Rectangle结构体,它的长和宽是int类型,并定义方法Area()和Primeter(),然后进行测试。
|
|
|
|
|
|
## 链接
|
|
|
- [目录](directory.md)
|