Go语言中面向对象-结构体和方法
2018-05-20 16:24
736 查看
主要讲解Go语言中面向对象中的 结构体和方法
主要知识点:Go语言仅支持封装,不支持继承和多态,Go语言的设计者认为Go语言面向对象不需要继承和多态,只需要封装就够了,而继承和多态通过接口来实现就可以了,面向接口编程在面向对象领域也是一种趋势
Go语言中没有 class、只有 struct,封装就是结构体对结构体进行封装。
Go语言中没有构造方法,在初始化结构体时,提供了多种初始化方式。
如果业务需要可以通过自定义工厂方法,实现构造方法的功能
结构体对象可能在栈上,也可能在堆上,此时我们并不需要知道,当编译器觉得不需要返回地址的时候则在栈上创建,如果需要返回地址,则在堆上创建。
熟悉为结构体定义方法,定义方法是分为 值接受者 和 指针接收者,只有指针接受者 才可以改变内容,如果结构体过大,也建议使用指针接受者
以下为代码示例:
package main import "fmt" //实体 结构体 定义 type treeNode struct { Value int Left, Right *treeNode } //自定义工厂方法 实现构造函数功能 func createTreeNode(value int) *treeNode { return &treeNode{Value:value} //此处返回一个局部变量地址给外部使用,如果在 C++ 中,这是一个错误写法,会导致错误 //但在 Go中 不会出现问题 } //为结构体定义方法,有一个接收者的概念,这个方法是 值接受者 // 为treeNode 定义方法,node相当于 Java 中的 this func (node treeNode) print() { fmt.Println(node.Value) } //定义set 方法,这里是 指针接收者 func (node *treeNode) setValue(value int) { if node == nil { fmt.Println("Setting Value to nil " + "node. Ignored.") return } node.Value = value } //遍历对象方法 func (node *treeNode) traverse() { if node == nil{ return } node.Left.traverse() node.print() node.Right.traverse() } func main() { //申明空结构体 var root treeNode //初始化部分属性 root = treeNode{Value:3} //初始化空的结构体 root.Left = &treeNode{} //申明时初始化全部属性 root.Right = &treeNode{5,nil,nil} // new 是内置方法,返回对象的指针 root.Left.Right = new(treeNode) root.Right.Left = createTreeNode(2) //在Slice 中省略 结构体名的写法 nodes :=[]treeNode{ {Value:3}, {}, {6,nil,&root}, } fmt.Println(nodes) root.print() //3 root.Right.Left.setValue(4) //4 root.Right.Left.print() //遍历对象方法 root.traverse() }
相关文章推荐
- Go语言中结构体方法副本传参与指针传参的区别介绍
- Go语言中通过结构体匿名字段实现方法的继承和重载
- Go语言结构体定义和使用方法
- Go语言指针访问结构体的方法
- GO语言结构体方法跟结构体指针方法的区别
- Go语言 6 结构体、方法和接口
- Java语言基础{Java_se(05)}-面向对象-封装-构造方法-成员变量,局部变量
- go语言开发环境LiteIDE自动完成功能失效解决方法
- go语言 面向对象
- Go语言中的匿名结构体用法实例
- 在Go语言中使用JSON的方法
- Go语言实现简单留言板的方法
- Go语言daemon启动的解决方法.linux平台
- 在ubuntu下构建go语言开发环境的方法
- Go语言转换所有字符串为大写或者小写的方法
- Go语言fmt包Printf方法详解
- Go语言获取本机逻辑CPU数量的方法
- C语言结构体定义的几种方法
- go语言实现猜数字小游戏的方法
- Go语言中函数的参数传递与调用的基本方法