You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
1.8 KiB

  1. # 结构体
  2. 结构体是一个复合类型,用于表示一组数据。
  3. 结构体由一系列属性组成,每个属性都有自己的类型和值。
  4. ## 初始化
  5. ```go
  6. // 定义一个结构体(类型),每个结构体包含 name、age、hobby 三个元素
  7. type Person struct {
  8. name string
  9. age int
  10. hobby []string
  11. }
  12. //方式1:先后顺序
  13. var p1 = Person{"lihui", 22, []string{"唱跳", "rap"}}
  14. fmt.Println(p1.name, p1.age, p1.hobby)
  15. //方式2:关键字
  16. var p2 = Person{name: "lihui", age: 22, hobby: []string{"饺子", "馒头"}}
  17. fmt.Println(p2.name, p2.age, p2.hobby)
  18. //方式3:先声明再赋值
  19. var p3 Person
  20. p3.name = "lihui"
  21. p3.age = 18
  22. p3.hobby = []string{"唱跳", "篮球"}
  23. fmt.Println(p3.name, p3.age, p3.hobby)
  24. ```
  25. ## 结构体指针
  26. ```go
  27. type Person struct {
  28. name string
  29. age int
  30. }
  31. // 初始化结构体(创建一个结构体对象)
  32. p1 := Person{"lihui", 18}
  33. fmt.Println(p1.name, p1.age)
  34. // 初始化结构体指针
  35. // var p2 *Person = &Person{"lihui", 18}
  36. p2 := &Person{"lihui", 18}
  37. fmt.Println(p2.name, p2.age)
  38. var p3 *Person = new(Person)
  39. p3.name = "lihui"
  40. p3.age = 18
  41. fmt.Println(p3.name, p3.age)
  42. ```
  43. ## 赋值拷贝
  44. 其实本质上都拷贝了,只不过由于数据存储方式的不同,导致拷贝的有些是数据,有些是内存地址(指针)。
  45. 但是:
  46. - 感觉拷贝:字符串、数组、整型等。
  47. - 感觉不拷贝:map、切片。
  48. ## 标签
  49. 没啥用,给结构体的元素一个注释
  50. # 函数
  51. 可以把函数当做一个代码块,用于实现某个功能。并且提高代码的重用性和可读性。
  52. ```go
  53. func 函数名(参数) 返回值 {
  54. 函数体
  55. }
  56. ```
  57. 关于函数名需要注意:函数名只能是字母数字下划线组合且数字不能开头,即驼峰式命名
  58. # 接口