Go语言之结构体嵌套

2020-06-02  本文已影响0人  测试探索
Go语言之结构体嵌套

在type Student2 struct结构体中,注意book参数引用的是地址,方便修改数据

package main

import "fmt"

func main() {

    b1 := Book{}
    b1.bookName = "西游记"
    b1.price = 45.8

    s1 := Student{}
    s1.name = "王二狗"
    s1.age = 18
    s1.book = b1   //值传递
    fmt.Println(b1)  //{西游记 45.8}
    fmt.Println(s1) //  {王二狗 18 {西游记 45.8}}

    fmt.Printf("学生姓名:%s,学生年龄:%d,看的书是《%s》,书的价格是:%.2f\n", s1.name, s1.age, s1.book.bookName, s1.book.price)

    s1.book.bookName= "红楼梦"
    fmt.Println(b1)  //{西游记 45.8}
    fmt.Println(s1)  //{王二狗 18 {红楼梦 45.8}}

    b4 := Book{bookName:"呼啸山庄",price:57.9}
    s4 := Student2{
        name: "Ruby",
        age:  18,
        book: &b4,
    }
    fmt.Println("b4",b4)  //{呼啸山庄 57.9}
    fmt.Println("s4",s4)  //{Ruby 18 0xc0000964a0}
    fmt.Println("\t",s4.book) // &{呼啸山庄 57.9}

    s4.book.bookName = "雾都孤儿"
    fmt.Println("b4",b4) // {雾都孤儿 57.9}
    fmt.Println("s4",s4) // {Ruby 18 0xc000004500}
    fmt.Println("\t",s4.book) // &{雾都孤儿 57.9}

    s2 := Student{name: "李小华", age: 19, book: Book{bookName: "Go语言是如何炼成的", price: 89.7}}
    fmt.Println(s2) //{李小华 19 {Go语言是如何炼成的 89.7}}

    s3 := Student{
        name: "jerry",
        age:  17,
        book: Book{
            bookName: "十万个为什么",
            price:    55.9,
        },
    }
    fmt.Println(s3.name,s3.age)
    fmt.Println("\t",s3.book.bookName,s3.book.price)
}


//定义一个书的结构体
type Book struct {
    bookName string
    price    float64
}

//定义学生的结构体
type Student struct{
    name string
    age int
    book Book
}

type Student2 struct{
    name string
    age int
    book *Book //book的地址
}

上一篇下一篇

猜你喜欢

热点阅读