Go学习笔记07-结构体与方法

时间:2024-06-21 11:05:02

Go学习笔记07-结构体与方法

Go语言

面向对象

Go语言只支持封装,不支持继承和多态。

Go语言中只有struct,即结构体;没有class。

结构的定义与创建

  1. package main 


  2. import "fmt" 


  3. //定义结构 

  4. type treeNode struct { 

  5. value int 

  6. left, right *treeNode 




  7. //自定义的工厂函数 

  8. func createNode(value int) *treeNode{ 

  9. //返回的是局部变量的地址 

  10. return &treeNode{value: value} 




  11. // 

  12. func (node treeNode) print(){ 

  13. fmt.Print(node.value) 




  14. func main() { 

  15. //创建结构 

  16. root := treeNode{value: 3} 

  17. root.left = &treeNode{} 

  18. root.right = &treeNode{5, nil, nil} 

  19. root.right.left = new(treeNode) 

  20. root.left.right = createNode(2) 


  21. root.print() 

  22. fmt.Println() 



上面的代码创建的树如下图:

Go学习笔记07-结构体与方法
<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" version="8.5.3" editor="www.draw.io"><diagram>5ZhPk9ogGMY/TY7tJECiHnetbQ/tTGc8tHtkE0xoMaRI1thPXyLkDyR2HLtqOt2DG54XXuD3vBFGDy631QeBi+wzTwjzgJ9UHnznAQBhqD5r4aCFCM61kAqaaCnohDX9RYzoG7WkCdlZHSXnTNLCFmOe5ySWloaF4Hu724Yze9YCp2QgrGPMhupXmshMq3Mw6/SPhKZZM3MQLXTkGcc/UsHL3MznAbg5/unwFje5zEZ3GU74vifBlQeXgnOpn7bVkrAabYNNj3t/ItquW5BcnjMA6AEvmJWkWXHE1NDHDVcZ1ALlwUCJfpa8CbzZHS17UB2CeVF1QfWU1v9hk0ZNrTNp3ey6TQqOrEi9mkCF9xmVZF3guI7uVWkpLZNbZsJmsURIUp3ccNBiVNVJ+JZIcVBdmtIMkR5iKhMZI/Y9myMtZT2Hm27YFFbaJu7gqgfDd5w1vBLrcKqs0QxarAN4O9joSrD9qcIGvn832OH/BhtBG3b7fX4D2NGVYLdpnkXHeZr4W7Z3wD8b7J4k6u5gmlzIjKc8x2zVqY8dH99mQSoqv9Xy29C0nkzkO5HyYC5GuJRcSV3uT5wXFs16CX9mqVbMSxET6yiSWKRE9qQhcUEYlvTFzv43/IKxY9AlmicP9S1OtWKGdzsan4tNbVoceqG6+WS4X4YKDFGhcVS94gv9YfE12tlEzQxfOD2+1k3tR/ZXDwydotaLN6P6Vz8nEQycRL6TSG95kOhocLvt8zwfO43/Lc9PvB638RwC2yoUXOr5zPE8up7nY5eCCXuOhp5Hd33PkWPV4kLPwcJJ5J6Cr+j52N1kwp6PHIPhXd9zxyoELvQcucUzey3PVbP7dUJ3734Bgqvf</diagram></mxfile>
  • 不管是地址还是结构体本身,都用 . 来访问成员。
  • nil指针也可以调用方法

值接收者与指针接收者

  • 要改变内容必须使用指针接收者
  • 结构过大应优先考虑使用指针接收者
  • 一致性
  • 值接收者是Go语言特有的