1. 本书前面介绍了3种创建结构体的方式,我该使用哪种呢?
答:建议使用短变量声明法 :=
2.我明白了如何嵌套结构体,请问最多可嵌套多少层呢?
答:嵌套层级没有硬性要求,但不可过度,否则不如换一种数据结构
3.结构体数据字段可以是任何数据类型吗?
答:是的,在结构体中可使用任何数据类型,包括自定义类型
附:Go语言数据类型表
4.结构体数据字段默认为什么值?
答:默认为零值,根据字段的不同数据类型,零值相应的表现形式不同,见上表
5.如何指定是否要将结构体及其数据字段导出?
答:以大写字母开头的结构体名及字段名可以被导出,以小写字母开头不会被导出
6.什么情况下该使用指针?什么情况下该使用值?
答:在需要修改字段值的时候使用指针,不需要修改字段值的时候,仅使用值
package main
import "fmt"
type Movie struct{
Name string
Rating float64
}
func main(){
m := Movie{
Name : "FightClub",
Rating : 9.999
}
a := m //引用值
b := &m // 引用指针
fmt.Println(a)
fmt.Println(*b)
}
7.声明一个结构体,用于表示您很喜欢玩的游戏。请考虑游戏的名称、发布日期、适用平台等信息,并选择合适的数据类型。在main函数中,创建该结构体的一个实例,并将其数据字段打印到终端。
package main
import "fmt"
func main() {
g := Game{
Name: "Dota2",
Birth: "2011.10.21",
Platform: "Windows",
}
fmt.Printf("%+v", g)
}
type Game struct {
Name string
Birth string
Platform string
}
8.想出一种可使用嵌套结构体来表示的数据结构。一些这样的例子包括:大型建筑物的组成部分、简历中的条目、房子中的起居室。
package main
import "fmt"
func main() {
c := Crew{
摄影指导: "Jack",
掌机: "Mike",
摄影助理: CameraSupport{
Name: "Kris",
Name2: "Kurt",
Name3: "Smith",
},
}
fmt.Printf("%+v", c)
}
type Crew struct {
摄影指导 string
掌机 string
摄影助理 CameraSupport
}
type CameraSupport struct {
Name string
Name2 string
Name3 string
}
9. 阐述传递指针和传递值的差别,这种差别在内存方面意味着什么。
答:传递指针,指针指向底层结构体的内存,指针的值即内存的地址;传递值,变量不指向底层结构体的内存,仅复制了结构体的字段值。