(七)go语言面向对象

举报
Nick Qiu 发表于 2020/10/23 12:29:58 2020/10/23
【摘要】 面向对象简介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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。