package main import "fmt" type Book struct { title, author string pages int } func main() { // { // //指针 // p := new(int) // fmt.Println(p, *p) // b := 1 // q := &b // fmt.Println(q, *q) // } // { // //结构体 // book := Book{"Go语言101", "老貘", 256} // fmt.Println(book) // {Go语言101 老貘 256} // // 使用带字段名的组合字面量来表示结构体值。 // book = Book{author: "老貘", pages: 256, title: "Go语言101"} // // title和author字段的值都为空字符串"",pages字段的值为0。 // book = Book{} // // title字段空字符串"",pages字段为0。 // book = Book{author: "老貘"} // // 使用选择器来访问和修改字段值。 // var book2 Book // <=> book2 := Book{} // book2.author = "Tapir" // book2.pages = 300 // fmt.Println(book2.pages) // 300 // var _ = Book{ // author: "老貘", // pages: 256, // title: "Go语言101", // 这里行尾的逗号不可省略 // } // } { //在字段选择器中,属主结构体值可以是指针,它将被隐式解引用 type Book struct { pages int } book1 := &Book{100} // book1是一个指针 book2 := new(Book) // book2是另外一个指针 new 新建的是指针 fmt.Println(book1, book2) // 像使用结构值一样来使用结构体值的指针。 book2.pages = book1.pages fmt.Println(book1.pages == book2.pages) // 上一行等价于下一行。换句话说,上一行 // 两个选择器中的指针属主将被自动解引用。 (*book2).pages = (*book1).pages } }