main.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. import "fmt"
  3. type Book struct {
  4. title, author string
  5. pages int
  6. }
  7. func main() {
  8. // {
  9. // //指针
  10. // p := new(int)
  11. // fmt.Println(p, *p)
  12. // b := 1
  13. // q := &b
  14. // fmt.Println(q, *q)
  15. // }
  16. // {
  17. // //结构体
  18. // book := Book{"Go语言101", "老貘", 256}
  19. // fmt.Println(book) // {Go语言101 老貘 256}
  20. // // 使用带字段名的组合字面量来表示结构体值。
  21. // book = Book{author: "老貘", pages: 256, title: "Go语言101"}
  22. // // title和author字段的值都为空字符串"",pages字段的值为0。
  23. // book = Book{}
  24. // // title字段空字符串"",pages字段为0。
  25. // book = Book{author: "老貘"}
  26. // // 使用选择器来访问和修改字段值。
  27. // var book2 Book // <=> book2 := Book{}
  28. // book2.author = "Tapir"
  29. // book2.pages = 300
  30. // fmt.Println(book2.pages) // 300
  31. // var _ = Book{
  32. // author: "老貘",
  33. // pages: 256,
  34. // title: "Go语言101", // 这里行尾的逗号不可省略
  35. // }
  36. // }
  37. {
  38. //在字段选择器中,属主结构体值可以是指针,它将被隐式解引用
  39. type Book struct {
  40. pages int
  41. }
  42. book1 := &Book{100} // book1是一个指针
  43. book2 := new(Book) // book2是另外一个指针 new 新建的是指针
  44. fmt.Println(book1, book2)
  45. // 像使用结构值一样来使用结构体值的指针。
  46. book2.pages = book1.pages
  47. fmt.Println(book1.pages == book2.pages)
  48. // 上一行等价于下一行。换句话说,上一行
  49. // 两个选择器中的指针属主将被自动解引用。
  50. (*book2).pages = (*book1).pages
  51. }
  52. }