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() 



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

<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语言特有的

最新文章

  1. table首行固定
  2. AppCan接入微信并且进行文字分享
  3. 有关CSS中字体响应式的设置
  4. Test语言编译器V0.8
  5. CI 在nginx中出现404错误的解决方式
  6. Android与服务器端数据交互(http协议整合struts2+android)
  7. css考核点整理(十二)-能描述下你在项目中都用到了哪些符合逐渐增强和优雅降级的理念的技巧吗
  8. spring加载过程中jar包加载不了,解决方法
  9. 【Tools】ubuntu虚拟机Vmware Tools 安装记录
  10. linux 解决Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
  11. bat命令行实现全盘遍历搜索文件
  12. SpringMVC4+Hibernate5+SQLServer 2014 整合(包括增删改查分页)
  13. python文件基础IO,OS
  14. Python: find the smallest and largest value
  15. SQL SERVER数据库升级手册
  16. Ubuntu 14.04环境变量修改
  17. SharePoint如何模拟用户
  18. 2018.08.17 洛谷[POI2010]GRA-The Minima Game(线性dp)
  19. APS审核经验+审核资料汇总——计算机科学与技术专业上海德语审核
  20. mongodb的学习-3-在Mac上的安装配置

热门文章

  1. Asp.Net 之 Web.config 配置文件详解
  2. C#装箱和拆箱。
  3. Centos 6.8 配置mysql数据库主从同步
  4. JavaScript解析机制与闭包原理实例详解
  5. 前端学习 之 Bootstrap(二)
  6. P2590 [ZJOI2008]树的统计
  7. P1993 小 K 的农场
  8. Python中字典dict
  9. mysql数据库表操作-表的主键索引和普通索引
  10. Python&#160;date,datetime,time等相关操作总结