Go语言入门经典 —— 结构体 习题 (附Go语言数据类型表)

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. 阐述传递指针和传递值的差别,这种差别在内存方面意味着什么。

答:传递指针,指针指向底层结构体的内存,指针的值即内存的地址;传递值,变量不指向底层结构体的内存,仅复制了结构体的字段值。

猜你喜欢

转载自blog.csdn.net/fengqy1996/article/details/124251188