Go语言编程(十一)之类型系统
JoeySheng · · 1476 次点击 · · 开始浏览类型系统 type system
类型系统是指一个语言的类型体系结构。一个典型的类型系统通常包含如下基本内容:
基础类型,如byte、int、bool、float等
复合类型,如数组、结构体、指针等
可以指向任意对象的类型(Any类型)
值语义和引用语义
面向对象,即所有具备面向对象特征(比如成员方法)的类型
接口
类型系统描述的是这些内容在一个语言中如何被关联。
为类型添加方法
在Go语言中,你可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法,例如
typeIntegerint
func(aInteger)Less(bInteger)bool{
returna<b
}
在这个例子中,我们定义了一个新类型Integer,它和int没有本质不同,只是它为内置的int类型增加了一个新方法Less()。
这样实现了Integer后,就可以让整型像一个普通的类一样使用:
funcmain(){
varaInteger=1
ifa.Less(2){
fmt.Println(a,"Less2")
}
}
值语义和引用语义
值语义和引用语义的差别在于赋值,比如下面的例子:
b = a
b.Modify()
如果b的修改不会影响a的值,那么此类型属于值类型。如果会影响a的值,那么此类型是引用类型。
结构体
Go语言的结构体(struct)和其他语言的类(class)有同等的地位,但Go语言放弃了包括继承在内的大量面向对象特性,只保留了组合这个最基础的特性。
上面提到过,所有的Go语言类型(指针类型除外)都可以有自己的方法。在这个背景下,Go语言的结构体只是很普通的复合类型,例如我们要定义一个矩形类型:
typeRectstruct{
x,yfloat64
width,heightfloat64
}
然后我们定义成员方法Area()来计算矩形的面积:
func(r*Rect)Area()float64{
returnr.width*r.height
}
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
类型系统 type system
类型系统是指一个语言的类型体系结构。一个典型的类型系统通常包含如下基本内容:
基础类型,如byte、int、bool、float等
复合类型,如数组、结构体、指针等
可以指向任意对象的类型(Any类型)
值语义和引用语义
面向对象,即所有具备面向对象特征(比如成员方法)的类型
接口
类型系统描述的是这些内容在一个语言中如何被关联。
为类型添加方法
在Go语言中,你可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法,例如
typeIntegerint
func(aInteger)Less(bInteger)bool{
returna<b
}
在这个例子中,我们定义了一个新类型Integer,它和int没有本质不同,只是它为内置的int类型增加了一个新方法Less()。
这样实现了Integer后,就可以让整型像一个普通的类一样使用:
funcmain(){
varaInteger=1
ifa.Less(2){
fmt.Println(a,"Less2")
}
}
值语义和引用语义
值语义和引用语义的差别在于赋值,比如下面的例子:
b = a
b.Modify()
如果b的修改不会影响a的值,那么此类型属于值类型。如果会影响a的值,那么此类型是引用类型。
结构体
Go语言的结构体(struct)和其他语言的类(class)有同等的地位,但Go语言放弃了包括继承在内的大量面向对象特性,只保留了组合这个最基础的特性。
上面提到过,所有的Go语言类型(指针类型除外)都可以有自己的方法。在这个背景下,Go语言的结构体只是很普通的复合类型,例如我们要定义一个矩形类型:
typeRectstruct{
x,yfloat64
width,heightfloat64
}
然后我们定义成员方法Area()来计算矩形的面积:
func(r*Rect)Area()float64{
returnr.width*r.height
}