Go 语言编程 —— 面向对象,类、成员方法定义

幸运草 2020年4月14日22:48:51前端框架评论阅读模式

Go 语言是支持面向对象编程(OOP,ObjectOriented Programming)思想的开发语言。这个也可以作为 Go 是比 C 更好的编程语言的证据之一。当然 PHP才是网络编程最好的语言,没有之一。

相对于传统开发语言的面向对象体系的做了一些变革改进,这也使得 Go 语言简洁而优雅。Go 语言在继承、虚函数、构造函数等概念上做了精简。Go 语言在设计指出就天然支持面向对象。

类型体系

一个典型的类型系统一般包括以下基本内容:

  • 基础类型,如 int, byte,bool 等。
  • 复合类型,如数组,结构体等。
  • 面向对象
  • 接口

在 C# 语言中有两种类型系统,值类型和引用类型。值类型(value type)包括byte,short,int,long,float,double,decimal,char,bool 和 struct。值类型变量声明后,不管是否已经赋值,编译器为其分配内存,数据存储在内存的堆栈中,从堆栈中可以快速地访问这些数据,因此,值类型表示实际的数据。引用类型(reference type)包括string,class,interface 和 数组。当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。引用类型,表示指向存储在内存堆中的数据的指针或引用。

成员方法

在 Go 语言中,我们可以给任意类型添加方法。

import "fmt"

func main() {
    p := People{Name: "Boyce"}
    p.SayHi()
}

type People struct {
    Name string
}

func (p People) SayHi() {
    fmt.Printf("Hi, I'm %s", p.Name)
}

在上面的例子中,我们定义了一个新的类 People,它有一个 Name 是 string 类型的,还给它添加了一个方法 SayHi()。

最终的运行结果为:Hi, I'm Boyce。

初始化

在 Go 语言中,和其他面向对象的语言几乎差不多,没有显示初始化的变量会初始化为默认值,例如 bool 类型的默认值为 false,int 类型的默认值为 0,string 类型的默认值为空字符串。

在 Go 语言中也没有构造函数的概念,我们可以自己构建一个 New*** 的方法来完成构造函数的功能,现在对上面的代码进行简单的改造:

package main

import "fmt"

func main() {
    p := NewPeople("boyce")
    p.SayHi()
}

type People struct {
    Name string
}

func (p People) SayHi() {
    fmt.Printf("Hi, I'm %s", p.Name)
}

func NewPeople(name string) People {
    p := People{Name: name}
return p
}

代码中增加了一个叫做 NewPeople 的方法,方法的返回类型为 People,不再使用默认的初始化对象方式,而是改为调用 NewPeople 来时初始化对象 People。

最终的运行结果并无任何差异:Hi, I'm Boyce。

为什么需要初始化方法

由于上面例子类中只有一个属性,可能没有任何感觉,但是当类中定义的属性变多时,问题可能就会显现出来。在我个人看来初始化方法有两点好处:

  • 帮我们初始化成一些非系统默认值,也就是业务上的默认值。
  • 只要是人的操作就会产生错误。尽量的把代码封装起来,调用的时候越无脑越简单越好

总结

上面结合 C# 介绍了类型体系,应该学会了如何使用 Go 语言定义一个类、在类中添加成员方法、如何初始化一个类、如何通过自定义的构造函数初始一个类,以及我们选择使用定义初始化方法的好处。

张开今日的双眼,翻开今日的美妙

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草
Go语言接口规则 前端框架

Go语言接口规则

Go语言接口规则 接口是一个或多个方法签名的集合。任何类型的方法集中只要拥有该接口对应的全部方法签名。就表示它 "实现" 了该接口,无须在该类型上显式声明实现了哪个接口。对应方法,是指有相同名称、参数...
Go语言中处理 HTTP 服务器 前端框架

Go语言中处理 HTTP 服务器

1 概述 包 net/http 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。 快速开始: package main import (   "log"   "net/http" )...

发表评论