(七)go语言面向对象
【摘要】 面向对象简介go 语言中没有对象,和c语言类似,通过struct实现面向对象的程序编写,如下图:TreeNode 定义了Left 、Right、Value属性,和traverse方法。go语言的面向对象仅仅支持封装,不支持继承、多态go语言中没有构造函数import "fmt"type TreeNode struct { Left ,Right * TreeNode; Value...
面向对象
简介
go 语言中没有对象,和c语言类似,通过struct实现面向对象的程序编写,如下图:TreeNode 定义了Left 、Right、Value属性,和traverse方法。
go语言的面向对象仅仅支持封装,不支持继承、多态
go语言中没有构造函数
import "fmt"type TreeNode struct {
Left ,Right * TreeNode;
Value int}func (root * TreeNode) traverse() { if root == nil { return
}
root.Left.traverse()
fmt.Println(root.Value)
root.Right.traverse()
}
例子
对象的使用例子
package mainimport "fmt"//类的声明type TreeNode struct {
Left ,Right * TreeNode;
Value int}//类的函数,指针接受者; 要改变内容使用指针接收者,结果过大也用指针接收者,一致性使用指针接收者func (root * TreeNode) traverse() { if root == nil { return
}
root.Left.traverse()
fmt.Println(root.Value)
root.Right.traverse()
}//值接收者,go语言特有的;结构的一个拷贝func (node TreeNode) print() {
fmt.Print(node.Value," ")
}//工厂函数,用来创建对象,可以用它来代替构造函数,注意这里是返回的一个局部对象,局部对象在其他语言内做返回值是有错误的,但是在go语言中没有问题func createNode(value int) * TreeNode { return &TreeNode{Value:value}
}func main() { // 创建对象
var root TreeNode
fmt.Println(root) // 添加节点
root = TreeNode{ Value:3}
fmt.Println(root)
root.Left = &TreeNode{}
root.Right = &TreeNode{nil,nil,5} //在go 语言中,不管是指正,还是实例,都是用.号去访问
root.Right.Left = new(TreeNode)
fmt.Println(root)
root.Left.Right = createNode(2)
fmt.Println("traverse")
root.traverse()
}
面向对象的可见性
简介
名字一般使用CamelCase命名法
首字母大写: public (针对包来说的)
首字母小写:private(针对包来说的)
为结构定义的方法必须在同一个包内
包可以定义在多个文件中
例子
tree/entry/entry.go
package mainimport "fmt"import "../../tree"func main() { // 创建对象
var root tree.TreeNode
fmt.Println(root) // 添加节点
root = tree.TreeNode{ Value:3}
fmt.Println(root)
root.Left = &tree.TreeNode{}
root.Right = &tree.TreeNode{nil,nil,5} //在go 语言中,不管是指正,还是实例,都是用.号去访问
root.Right.Left = new(tree.TreeNode)
fmt.Println(root)
root.Left.Right = tree.CreateNode(2)
fmt.Println("traverse")
root.Traverse()
}
tree/node.go
package treeimport "fmt"//类的声明type TreeNode struct {
Left ,Right * TreeNode;
Value int}//类的函数,指针接受者; 要改变内容使用指针接收者,结果过大也用指针接收者,一致性使用指针接收者func (root * TreeNode) Traverse() { if root == nil { return
}
root.Left.Traverse()
fmt.Println(root.Value)
root.Right.Traverse()
}//值接收者,go语言特有的;结构的一个拷贝func (node TreeNode) Print() {
fmt.Print(node.Value," ")
}//工厂函数,用来创建对象,可以用它来代替构造函数,注意这里是返回的一个局部对象,局部对象在其他语言内做返回值是有错误的,但是在go语言中没有问题func CreateNode(value int) * TreeNode { return &TreeNode{Value:value}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)