go语言优势
1、并行与分布式支持
1并发执行“执行体”,Go语言在语言级别支持协程(goroutine)。
例 func run();
func main(){
go run();
}
2.执行体间通信
1.执行体之间互斥和同步
1.互斥:对共享资源进行访问
2.同步:对时序依赖进行处理
3.多数数据语言只支持到线程间互斥或同步
2、执行体之间消息通信
1.共享内存模型
GO有所保留
2.消息传递模型
典型模型(Erlang)主题思想
1.轻量级进程
2.消息乃进程间通信的唯一方式:即需要消息队列(message queue)或者进程邮箱(process mail box)进行通信
Go主要通信使用内置消息队列——通道(channel)
2、软件工程支持
1.代码风格规范
1.public变量必须以大写字母开头,private变量必须以小写字母开头
2.if ex{
} ————规范
if ex
{
} ————不规范
2.错误处理规范
1.defer f.Close();
defer关键字含义:不管程序是否出现异常,均在函数退出时自动执行相关代码;
2.Go语言函数允许返回多个值
1.传统模式:返回error类型,错误逻辑比较统一
3、编程哲学支持
1.GO反对函数和操作符重载
虽然重载解决了一小部分面向对象编程(OOP)的问题,但也带来极大负担。
2.支持类,类成员,类组合。反对继承,虚函数和虚函数重载
1.Go继承可用组合实现
type Foo struct{
}
func (foo *Foo) Bar(){
}
2.Go放弃了构造函数(constructor)和析构函数(destructor)
3.提供接口(interface)
1.go语言提供的接口与其他语言最大的区别就是它的非入侵性
1.传统方式:实现接口
class Foo implements IFoo{}
2.go方式
type Foo struct{}
var foo IFoo = new(Foo)
影响
1.Go语言的标准库再也不需要绘制类库的继承数图,只需要知道这个类实现了哪些方法就行
2.再也不用纠结接口拆的多细才合理:脱离了实际的用户场景,接口粗细毫无意义
3.不用为了实现接口而专门导入一个包,两个接口如果有相同方法,那他们就是等同的,可以互相赋值
小结:
1.更好支持协程控制
2.defer及多返回值
3.反对继承
4.接口的非入侵性
有疑问加站长微信联系(非本文作者)