美文网首页
(七)go语言面向对象

(七)go语言面向对象

作者: Nick_4438 | 来源:发表于2020-11-03 14:31 被阅读0次

面向对象

简介

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 main

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()
}

//值接收者,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 main

import "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 tree

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()
}

//值接收者,go语言特有的;结构的一个拷贝
func (node TreeNode) Print()  {
    fmt.Print(node.Value," ")
}


//工厂函数,用来创建对象,可以用它来代替构造函数,注意这里是返回的一个局部对象,局部对象在其他语言内做返回值是有错误的,但是在go语言中没有问题
func CreateNode(value int) * TreeNode {
    return &TreeNode{Value:value}
}

相关文章

  • 第十六章:Go语言面向对象编程

    1. GO语言OOP概述 Go语言不是纯粹的面向对象的语言,准确是描述是,Go语言支持面向对象编程的特性.Go语言...

  • Go基础语法(十二)

    面向对象编程 Go 并不是完全面向对象的编程语言。 Go 官网的 FAQ 回答了 Go 是否是面向对象语言,摘录如...

  • struct

    面向对象编程 Go支持面向对象编程特性,但和传统面向对象编程是有区别的,Go并不是纯粹的面向对象语言。 Go没有类...

  • (七)go语言面向对象

    面向对象 简介 go 语言中没有对象,和c语言类似,通过struct实现面向对象的程序编写,如下图:TreeNod...

  • go day06 面向对象 匿名组合 方法、方法集、方法

    面向对象 对于面向对象编程的支持Go语言设计的非常简洁而优雅。因为,Go语言并没有沿袭传统的面向对象编程中的诸多概...

  • 第13章-OOP面向对象编程

    面向对象(OOP) go并不是一个纯面向对象的编程语言。在go中的面向对象,结构体替换了类。 Go并没有提供类cl...

  • Golang(十三) OOP面向对象编程

    面向对象(OOP) go并不是一个纯面向对象的编程语言。在go中的面向对象,结构体替换了类。 Go并没有提供类cl...

  • Go语言入门第三节 Go 语言面向对象机制

    Go语言面向对象编程 Go语言的面相对象和主流语言有很大的不同,如Go 语言里是不支持继承,Go语言的接口实现也不...

  • go语言20小时从入门到精通(八、 面向对象编程)

    8.1 概述 对于面向对象编程的支持Go 语言设计得非常简洁而优雅。因为, Go语言并没有沿袭传统面向对象编程中的...

  • golang faq 精选

    go 是面向对象语言吗? 是也不是说是 因为 go 有 类型和方法 支持面向对象的方式编程。说不是 因为go没有...

网友评论

      本文标题:(七)go语言面向对象

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