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. @property详解,@property修饰符以及各个修饰符区别(上)

    相信很多参加过面试的人员很多都会被问到:weak与assign的区别,copy与strong的区别.如果你仅仅说一点点copy一般对NSString,weak对于控件的修饰,assign对于基本类型, ...

  2. webpack-dev-server不是内部或外部命令

    参考:https://segmentfault.com/q/1010000006939078 错误报告:webpack-dev-server不是内部或外部命令 错误原因: 当执行命令: npm run ...

  3. 4.5 explain 之 ref

    一.说明 显示索引的哪一列被使用了,如果可能的话,是一个常数.哪些列或常量被用于查找索引上的值. 二.示例 a. b. c. 关注我的公众号,精彩内容不能错过

  4. 【Java每日一题】20170206

    20170120问题解析请点击今日问题下方的“[Java每日一题]20170206”查看(问题解析在公众号首发,公众号ID:weknow619) package Feb2017; public cla ...

  5. javascript 点击触发复制功能

    摘要: js调用复制功能使用: document.execCommand("copy", false); document.execCommand()方法功能很强大,了解更多请戳: ...

  6. MySql: Year, Quarter, Month, Day, Hour statistics

    -- 统计 select count(*) as '当天记录数' from web_product where date(p_createtime) = curdate(); select count ...

  7. 网页导航栏 html + css的代码实现

    一般来讲,我们的网页导航栏是这么个模式来构建在结构上:1.首先我们需要给导航栏的div 给个类名 一般为nav2.然后就是一个无序表格 3.由于导航栏的文字一般都是链接用来跳转页面 要在li里面包含一 ...

  8. jQuery与vue分别实现超级简单的绿色拖动验证码功能

    jquery的绿色拖动验证功能 在网上看到了一个这样的问题:那种像拖动滑块匹配图形的验证方式是怎么实现的?. 突然想到实现一个简单绿色拖动验证码的功能,在网上搜了下,有一个用jquery实现的该功能代 ...

  9. CSS效果:CSS改变下拉列表select框的默认样式

    原理 原理是将浏览器默认的下拉框样式清除,然后应用上自己的,再附一张向右对齐小箭头的图片即可.当然右侧的小箭头可以用伪元素before或者after来实现. select { /*Chrome和Fir ...

  10. BZOJ4559: [JLoi2016]成绩比较(dp 拉格朗日插值)

    题意 题目链接 Sol 想不到想不到.. 首先在不考虑每个人的真是成绩的情况下,设\(f[i][j]\)表示考虑了前\(i\)个人,有\(j\)个人被碾压的方案数 转移方程:\[f[i][j] = \ ...