美文网首页
study_go_day7_结构体和方法

study_go_day7_结构体和方法

作者: 无风起个浪 | 来源:发表于2019-03-13 23:18 被阅读0次

package main

import "fmt"

/*面向对象

* go语言仅支持封装,不支持继承和多态,继承和多态用接口来做,面向接口编程

* go语言没有class,只有struct

* 不论地址还是结构体本身,一律使用"."来访问成员

*/

//结构体定义

type TreeNodestruct {

Value int

Left,Right *TreeNode

}

/*

*为结构体定义方法,定义在结构体外部

*(node TreeNode)接收者

*值传递

*与一般函数的区别是把参数拿到了前面

*编译器知道你是要值还是要指针,不加指针是值传递不能改变值

*显示定义和命名方法收者

*使用指针才可以改变结构内容

*nil指针也能调用方法

*要改变内容必须使用指针接收者

*结构过大建议使用指针接收者

*一致性:有指针接收者,最好都用指针接收者

*值接受者是go语言特有的

*值/指针接收者均可接收值/指针

*/

func (node TreeNode) print()  {

fmt.Println(node.Value)

}

func (node *TreeNode) setValue(value int)  {

if node == nil {

fmt.Println("node 为 nil")

return

  }

node.Value = value

}

//中式遍历

func (node *TreeNode) traverse()  {

if node == nil {

return

  }

node.Left.traverse()

node.print()

node.Right.traverse()

}

//工厂函数,go可以返回局部变量的地址给外部用,不需要知道内存分配在堆上还是栈上,由go环境来决定分配在哪里,go语言有垃圾回收机制,编译器会自动把没有用的回收掉

func createTreeNode(value int) *TreeNode  {

return &TreeNode{Value:value}

}

func main() {

//var root TreeNode

  root := TreeNode{Value:3}

fmt.Println(root)

root.Left = &TreeNode{}//left类型是指针所以要取地址

  root.Right = &TreeNode{5,nil,nil}

root.Right.Left = new(TreeNode)//new内建函数,返回一个TreeNode的地址

  root.Left.Right = createTreeNode(9)

fmt.Println(root)

root.print()

root.setValue(7)

root.print()

p := &root

p.setValue(100)

p.print()

var  d *TreeNode

d.setValue(100)

d = &root

d.setValue(400)

d.print()

root.traverse()

nodes := []TreeNode{

{Value:3},

{},

{6,nil,&root},

}

fmt.Println(nodes)

}

相关文章

  • study_go_day7_结构体和方法

    package main import "fmt" /*面向对象 * go语言仅支持封装,不支持继承和多态,继承和...

  • 15分钟快速回顾Swift3.0

    结构体 结构体有成员变量,构造方法,自定义方法,可以扩展系统的结构体 类和属性 构造函数 和 析构函数 字典模型转...

  • Swift Tour Learn (六) -- Swift 语法

    Swift语法基础(五)-- (类和结构体、属性、方法) 本章将会介绍 类和结构体对比结构体和枚举是值类型类是引用...

  • 结构体嵌套

    普通结构体嵌套 普通结构体嵌套,嵌套结构体可以通过 .子变量.方法 的方式获取被嵌套的属性和方法 匿名嵌套 匿名嵌...

  • SwiftUI-结构体与类

    一.结构体与类 结构体和类都可以使用属性和方法构建复杂数据类型,但是什么时候使用结构体,什么时候使用类呢?结构体和...

  • Swift5.1类和结构体

    9.类和结构体 结构体和类相比Swift中结构体和类的共同点:- 定义属性⽤于存储值- 定义方法⽤于提供功能- 定...

  • swift中的方法

    方法是关联了特定类型的函数。类,结构体以及枚举都能定义实例方法,方法封装了给定类型特定的任务和功能。类,结构体和枚...

  • Swift基础语法-结构体,构造函数,(系统结构体)扩充函数,值

    知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结...

  • [swift 进阶]读书笔记-第五章:结构体和类 C5P3_结

    结构体和类 5.3结构体(struct) 知识点: swift会自动会结构体的成员变量添加初始化方法。如下: ti...

  • swift面向对象特性——类和结构体

    类和结构体的定义 类的语法格式为: 结构体的语法格式为: Swift中类和结构体的名称都以大写字母开头。类的方法和...

网友评论

      本文标题:study_go_day7_结构体和方法

      本文链接:https://www.haomeiwen.com/subject/ibzxmqtx.html