|
@@ -2,10 +2,63 @@ 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)
|
|
|
+ // {
|
|
|
+ // //指针
|
|
|
+ // 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
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|