• Go 方法和接收者


     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 25 type treeNode struct { 26 value int 27 left, right *treeNode 28 } 29 30 func (node treeNode) print() { //显示定义和命名方法接收者(括号里) 31 32 fmt.Print(node.value) //只有使用指针才可以改变结构内容 33 fmt.Println() 34 } 35 36 func (node *treeNode) setValue ( value int) { //使用指针作为方法接收者 37 if node == nil { 38 fmt.Println("setting value to nil node") //nil指针也可以调用方法 39 return 40 } 41 node.value = value 42 } 43 44 func (node *treeNode ) traverse(){ 45 if node == nil{ 46 return 47 } 48 node.left.traverse() 49 node.print() 50 node.right.traverse() 51 } 52 53 func main() { 54 var root treeNode 55 fmt.Println(root) //{0 <nil> <nil>} 56 57 root = treeNode{value:3} 58 root.left = &treeNode{} 59 root.right = &treeNode{5,nil,nil} 60 root.right.left = new(treeNode) 61 62 nodes := []treeNode { 63 {value: 3}, 64 {}, 65 {6,nil,&root}, 66 } 67 fmt.Println(nodes) //[{3 <nil> <nil>} {0 <nil> <nil>} {6 <nil> 0xc04205a3e0}] 68 69 root.print() // 3 70 fmt.Println() 71 root.right.left.setValue(100) 72 root.right.left.print() //100 73 fmt.Println() 74 75 var pRoot *treeNode 76 pRoot.setValue(200) //setting value to nil node 77 pRoot = &root 78 pRoot.setValue(300) 79 pRoot.print() //300 80 81 root.traverse() //300 0 300 100 5 82 }
  • 相关阅读:
    正则表达式
    JavaIO详解
    Java集合类详解
    Java虚拟机原理图解
    关于Java中按值传递和按引用传递的问题详解
    图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)
    The 70th problem,UVa10396 Vampire Numbers
    二叉树的实现(Java语言描述)
    编程之路
    AngularJS 开发中常犯的10个错误
  • 原文地址:https://www.cnblogs.com/yuxiaoba/p/9346882.html
走看看 - 开发者的网上家园