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

Go学习笔记07-结构体与方法的更多相关文章

  1. C#学习笔记之结构体

    1.概述 结构是一种与类相似的数据类型,不过它较类更为轻量,一般适用于表示类似Point.Rectangle.Color的对象.基本上结构能办到的类全都能办到,但在某些情况下使用结构更为合适,后面会有 ...

  2. contiki学习笔记---process结构体

    process,字面意义,进程,看看它的结构 struct process { struct process *next; #if PROCESS_CONF_NO_PROCESS_NAMES #def ...

  3. 《PHP7底层设计与源码实现》学习笔记2——结构体对齐

    书里给了一段代码,假如有个结构体如下: struct test {     char a;     int b;     long c;     void* d;     int e;     cha ...

  4. c语言学习笔记之结构体存储

    今天讲讲结构体存储问题 首先,结构体简单说是对不同类型的封装,一开始我们可能会想结构体在内存中的存储的大小是直接元素的和 例如 我们可能会觉得是 结构体大小=int(4个字节)+ short(2个字节 ...

  5. C语言学习笔记--枚举&结构体

    枚举 枚举是一种用户定义的数据类型,它用关键字enum以如下语法格式来声明: enum 枚举类型名字 {名字0,名字1,...,名字n}: 枚举类型名字通常并不真的使用,要用的是大括号里面的名字,因为 ...

  6. 【C#学习笔记】结构体使用

    using System; namespace ConsoleApplication { struct _st { public string name; public int age; } clas ...

  7. 学习笔记 07 --- JUC集合

    学习笔记 07 --- JUC集合 在讲JUC集合之前我们先总结一下Java的集合框架,主要包含Collection集合和Map类.Collection集合又能够划分为LIst和Set. 1. Lis ...

  8. 机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析

    机器学习实战(Machine Learning in Action)学习笔记————07.使用Apriori算法进行关联分析 关键字:Apriori.关联规则挖掘.频繁项集作者:米仓山下时间:2018 ...

  9. Go语言 6 结构体、方法和接口

    文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...

随机推荐

  1. C#操作DataReader类

    一.常用属性 名称 说明 Depth 获取一个值,用于指示当前行的嵌套深度 FieldCount 获取当前行中的列数 HasRows 获取一个值,该值指示 SqlDataReader 是否有行 IsC ...

  2. Host '127.0.0.1' is not allowed to connect to this MySQL server

    错误:Host  '127.0.0.1'  is  not  allowed  to  connect  to  this  MySQL  server 一般原因: MySQL数据库的配置文件my.i ...

  3. BurpSuite 各模块使用

    Proxy  代理 对浏览器进行代理 对浏览器增加代理服务器 可以对http 请求进行监视 intercept is on 进行监控  off 不监控 可以任意修改 对任意的网络请求 进行爬虫 在 s ...

  4. Newtonsoft.Json(Json.net) 的使用

    Newtonsoft.Json(Json.net) 的使用 //Newtonsoft.Json.dll using Newtonsoft.Json; using Newtonsoft.Json.Con ...

  5. 线程 线程池 Task

    首先声明 这是读了 愉悦的绅士 文章 <菜鸟之旅——学习线程(线程和线程池)> <Task与线程> 的一些个人总结,还是那句话,如有不对,欢迎指正 文章以代码加注释的方法展示. ...

  6. SpringMVC 的运行原理

    0. 灵魂的拷问   问:SpringMVC 是什么?它有什么作用?  答:SpringMVC 的全称是 Spring Web Model-View-Controller,它是 Spring Fram ...

  7. Itween 动画插件中 的画线

    1.首先在你的层次视图中创建所需的节点 ,节点的位置顺序排列 2.导入Itween 插件 1.可以直接从项目外部拖拽到本项目中 2.通过AssetStore 中导入 3.在你的父节点上创建脚本 ,对象 ...

  8. 用js实现超链接导航菜单点击切换选中时的状态

    项目中使用到点解导航切换不同的颜色,如果只是li选项卡还好办,这次用到的超链接选项卡,因为a链接每次点击都会刷新,所以浏览器记不住点击的状态,也没法切换点击状态,因为项目中有好多地方要用到,在网上找了 ...

  9. iphone怎么投屏到电脑屏幕上

    随着苹果手机的更显换代,苹果手机的功能越来越强大,其中iphone手机更新了airplay镜像功能,所以想要手机投屏电脑的小伙伴就更加方便了,但是iphone怎么投屏到电脑呢?大家不用着急,下面即将为 ...

  10. nginx中有关 root 和 alias的主要区别

    举个例子给伙伴们区别就明显看出来了,例子如下: location /img/ { alias /var/www/image/; }注意:如果按照上述配置的话,则访问/img/目录里面的文件时,ning ...