8000 Go面向对象编程1——面向对象编程 · Issue #189 · holdyounger/ScopeBlog · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Go面向对象编程1——面向对象编程 #189
Open
@holdyounger

Description

@holdyounger

Go面向对象编程1——面向对象编程

Go 语言的代码是以包结构来组织的,且如果标示符(变量名,函数名,自定义类型等)如果以大写字母开头那么这些标示符是可以导出的,可以在任何导入了定义该标示符的包的包中直接使用。Go 语言中的面向对象和 C++,Java 中的面向对象不同,因为 Go 语言不支持继承,Go 语言只支持组合。

自定义类型

Go 语言的中结构体 struct 与 C++、JAVA 中的类 class 相似,但 Go 放弃了传统面向对象的诸多特性,只保留了组合。

  • type typeName typeSpecification

其中,typeName 可以是一个包或者函数内唯一合法的 Go 标示符。typeSpecification 可以是任何内置的类型,一个接口或者是一个结构体。所谓结构体,它的字段是由其他类型或者接口组成。例如我们通过结构体定义了一下类型:

type ColorPoint struct {
    color.Color     // 匿名字段(嵌入)
    x, y int        // 具名字段(聚合)
}

以上代码我们通过结构体自定义了类型 ColorPoint,结构体中 color.Color 字段是 Color 包的类型 color,这个字段没有名字,所以被称为匿名的,也是嵌入字段。字段 xy 是有变量名的,所以被称为具名字段。假如我们创建了类型 ColorPoint 的一个值 point(通过语法:point := ColorPoint{} 创建),那么这些字段可以通过 point.Colorpoint.xpoint.y 访问。其他面向对象语言中的"类 (class)"、"对象 (object)"、"实例 (instance)"在 Go 语言中我们完全避开使用。相反的我们使用"类型 (type)"和其对应的"值",其中自定义类型的值可以包含方法。

定义了结构体后如何创建并初始化一个对象实例呢?Go 语言支持以下几种方法进行实现:

//先定义一个结构体Man
type Man struct{
    name string
    age int
}
//对象创建与初始化
man := new(Man)
man := &Man{}
man := &Man{"Tom", 18}
man := &Man{name: "Tom", age: 18}

为了更加方便的创建对象,我们一般会使用一个全局函数来完成对象的创建,这和传统的“构造函数”类似。

func NewMan(name string, age int) *Man {
    return &Man{name, age}
}

blog link Go面向对象编程1——面向对象编程

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0