1. package main
  2.  
  3. import (
  4. "fmt"
  5. )
  6.  
  7. //面向对象
  8. //go仅支持封装,不支持继承和多态
  9. //go语言中没有class,只要struct
  10. //不论地址还是结构本身,一律使用.来访问成员
  11. //要改变内容必须使用指针接收者
  12. //结构过大考虑指针接收者
  13. //值接收者是go语言特有
  14. //封装
  15. //名字一般使用CamelCase
  16. //首字母大写: public
  17. //首字母小写:private
  18.  
  19. //包
  20. //每个目录一个包,包名可以与目录不一样
  21. //main包包含可执行入口,只有一个main包
  22. //为结构定义的方法必须放在同一个包内,但是可以是不同文件
  23.  
  24. type treeNode struct {
  25. value int
  26. left, right *treeNode
  27. }
  28.  
  29. func (node treeNode) print() { //显示定义和命名方法接收者(括号里)
  30.  
  31. fmt.Print(node.value) //只有使用指针才可以改变结构内容
  32. fmt.Println()
  33. }
  34.  
  35. func (node *treeNode) setValue ( value int) { //使用指针作为方法接收者
  36. if node == nil {
  37. fmt.Println("setting value to nil node") //nil指针也可以调用方法
  38. return
  39. }
  40. node.value = value
  41. }
  42.  
  43. func (node *treeNode ) traverse(){
  44. if node == nil{
  45. return
  46. }
  47. node.left.traverse()
  48. node.print()
  49. node.right.traverse()
  50. }
  51.  
  52. func main() {
  53. var root treeNode
  54. fmt.Println(root) //{0 <nil> <nil>}
  55.  
  56. root = treeNode{value:}
  57. root.left = &treeNode{}
  58. root.right = &treeNode{,nil,nil}
  59. root.right.left = new(treeNode)
  60.  
  61. nodes := []treeNode {
  62. {value: },
  63. {},
  64. {,nil,&root},
  65. }
  66. fmt.Println(nodes) //[{3 <nil> <nil>} {0 <nil> <nil>} {6 <nil> 0xc04205a3e0}]
  67.  
  68. root.print() //
  69. fmt.Println()
  70. root.right.left.setValue()
  71. root.right.left.print() //
  72. fmt.Println()
  73.  
  74. var pRoot *treeNode
  75. pRoot.setValue() //setting value to nil node
  76. pRoot = &root
  77. pRoot.setValue()
  78. pRoot.print() //
  79.  
  80. root.traverse() //300 0 300 100 5
  81. }

Go 方法和接收者的更多相关文章

  1. 使用bind方法确定接收者

    var buffer = { entries : [], add : function(s){ this.entries.push(s); }, concat : function(){ return ...

  2. [Effective JavaScript 笔记]第20条:使用call方法自定义接收者来调用方法

    不好的实践 函数或方法的接收者(即绑定到特殊关键字this的值)是由调用者的语法决定的.方法调用语法将方法被查找的对象绑定到this变量,(可参阅之前文章<理解函数调用.方法调用及构造函数调用之 ...

  3. go中方法的接收者是值或者指针的区别

    值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string } func (t T) M1() { t.Name = "name1" ...

  4. [Effective JavaScript 笔记]第25条:使用bind方法提取具有确定接收者的方法

    js里方法和属性值为函数,就像一个东西两种称呼一个样,比如土豆,也叫马铃薯,一个样.既然一样,那就可以对对象的方法提取出来为函数,然后把提取出来的函数作为回调函数直接传递给高阶函数. 高阶函数是什么 ...

  5. (11)Go方法/接收者

    方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数.这种特定类型变量叫做接收者(Receiver).接收者的概念就类似于其他语言中的this或者 self. 方法的定义格式如 ...

  6. Golang 方法接收者是值还是指针问题

    对于普通结构体作为接收者,值和指针并没有区别. (以下代码摘抄自Go In Action 中文版) type defaultMatcher struct{} // 方法声明为使用 defaultMat ...

  7. golang指针接收者和值接收者方法调用笔记

    初学go时很多同学会把 值接收者 和 指针接收者 的方法相互调用搞混淆,好多同学都只记得指针类型可以调用值接收者方法和指针接收者方法,而值类型只能调用值接收者方法,其实不然,在某些情况下,值类型也是可 ...

  8. 图解JVM执行引擎之方法调用

    一.方法调用 方法调用不同于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程.Class文件的编译过程中不包括传统编译器中的连接步骤,一 ...

  9. 编写高质量JS代码的68个有效方法(八)

    [20141227]编写高质量JS代码的68个有效方法(八) *:first-child { margin-top: 0 !important; } body>*:last-child { ma ...

随机推荐

  1. python_函数进阶(5)

    第1章 函数有用信息1.1 login.__doc__1.2 login.__name__第2章 装饰器的进阶2.1 带参数的装饰器2.2 多个装饰器装饰一个函数2.3 开放封闭原则 第3章 可迭代对 ...

  2. solr管理界面下统计多个时间段的数据 facet.query

    在Raw Query Parameters参数里面输入时间段即可 如下图所示: facet.query=publishTime:[2017-06-05T00:00:00Z TO 2017-06-07T ...

  3. log4j:WARN Please initialize the log4j system properly. 异常解决

    log4j:WARN Please initialize the log4j system properly. 这个异常很少遇到,咋一看,原来是没有配置logger4j的配置文件 问题解决方法: 传统 ...

  4. idea使用Git提交代码时忽略指定文件或文件夹

    简述 使用idea编写代码并使用git作为版本控制器的时候,常常不需要提交配置文件以及一些其他不需要提交的文件,可以使用.ignore插件来在上传的时候忽略一些文件或文件夹. 安装 注意:安装完成之后 ...

  5. 通过流传入excel解析的问题

    做了个excel文件导入的功能,接收excel文件流,先读取文件流头部信息确定文件类型,然后调用poi方法 OPCPackage pkg = OPCPackage.open(inputStream) ...

  6. js事件、Js中的for循环和事件的关系、this

    一.js事件  1.事件 用户在网页中所触发的行为 鼠标滑动种类很多,键盘.表单特列: 点击:onclick 鼠标进入:onmouseenter 鼠标离开:onmouseleave 鼠标悬浮:onmo ...

  7. 使用vbScript 链接SQLserver数据库和基础操作

    使用vbs链接SQLserver数据库 数据库的创建.设计使用 management studio完成 1.本地链接数据库 set oCon = server.createObject("a ...

  8. Android 仿百度医生的智能分诊界面

    http://blog.csdn.net/jiang89125/article/details/49622853

  9. Java垃圾回收机制分析

    Java的堆是一个运行时数据区,类的实例从中分配空间,堆中存储着正在运行的应用程序所建立的所有对象.垃圾回收是一种动态存储管理技术.它按照特定的垃圾回收算法,自动释放掉不再被引用的对象.堆内存里垃圾的 ...

  10. sybase sql anywhere 5.0 安装后sybase central中无法打开视图等的解决办法

    无法打开的原因初步分析要用英文版的xp,后来在如下处发现问题,是sql anywhere的版本太旧了, 可能没有使用Unicode编码,设置一下如下选项可以解决问题.