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日内与变化吧联系。
- 赞助本站
- 微信扫一扫
-
- 加入Q群
- QQ扫一扫
-
评论