学习了一段时间 go 语言,用两句话来总结自己的感受:
脚本语言的语法,C++语言的效率,总之就是一个字:“爽”!
这里总结一下go面向对象的特征,如有错误,欢迎大家指正。
面向对象三大特征:封装、继承、多态,我们一一展开。
1. 封装
和别的 OO 语言有 4 个或更多的访问层次相比(一般包括:public, private, default(package内可访问), protected),Go 把它简化为了 2 层:
a. 包范围内的:通过标识符首字母小写,`对象` 只在它所在的包内可见
b. 可导出的:通过标识符首字母大写,`对象` 对所在包以外也可见
如:
package test
function f1() {......}
function F2() {......}
f1,F2函数在test package内部都是可以访问的,在package外部只有F2函数可以访问。该设计的好处就是简单,不好的地方就是与其他OO语言访问控制灵活性不够;但GO设计原则就是简单优雅,简单就是美。
2. 继承
用组合实现:内嵌一个(或多个)包含想要的行为(字段和方法)的类型;多重继承可以通过内嵌多个类型实现。如:
type A struct{
StrA string
}
func (a *A) Methoda() {......}
type B struct{
StrB string
}
func (b *B) Methodb() {......}
可以用如下方法采用多重继承:
type C struct {
A
B
StrC string
}
此时C就继承了A,B,同时也继承了A,B的数据成员和方法。与C++,JAVA比起来,GO没有 class的概念,实现继承也不用使用关键字, c++使用“:”实现继承,JAVA使用extends关键字实现继承。
3. 多态
用接口实现:某个类型的实例可以赋给它所实现的任意接口类型的变量。类型和接口是松耦合的,并且多重继承可以通过实现多个接口实现。Go 接口不是 Java 和 C# 接口的变体,而且:接口间是不相关的,并且是大规模编程和可适应的演进型设计的关键。
----引用于《The Way to Go》
type A interface {
func Method() {....}
}
如果某个类型实现了接口A的所有方法,则默认地实现了接口A
type S struct {...}
func (s *S) Method() {......}
以上只是简单说明了GO语言面向对象的特征,由此可以发现GO几个重要的设计原则:
a. 语言语法设计简单,简单就是美;
b. 松散类型,类型灵活;
c. 力求减少程序员工作量,复杂的工作由编译器来完成;
个人认为GO是目前效率和简洁性结合最完美的语言,被成为“21世纪的C语言”绝对不是浪得虚名;从各大招聘网站可以看出,GO已经在前后端应用全面展开,Android移动端也已经支持,而且会挑战C++的地位,在中间件领域更具优势。所以GO会在各个领域全面展开应用,也欢迎大家加入到学习GO语言的行列中。