1. GO 语言并没有沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承和重载,而只是支持了最基本的类型组合功能
2. 在静态语言中 属于 第一个支持 函数多返回值
3. GO 语言在语言级别支持协程,叫 goroutine
多数语言在语法层面并不直接支持协程,而通过库的方式支持的协程的功能并不完整,比如仅仅提供协程的创建,销毁和切换
能力。
4. 针对 “执行体之间的消息传递” (协程属于执行体的一种)。在并发编程模型的选择上,有两个流派,一个是共享内存模型,一个是
消息传递模型。多数传统语言选择了前者,少数语言选择后者,其中选择 "消息传递模型" 的最典型代表是 Erlang 语言。业界
有专门的术语叫 "Erlang风格的并发模型", 其主体思想是两点: 一是 "轻量级的进程(Erlang中 ‘进程’ 这个术语就是 执行体
的一种)" , 二是 "消息乃进程间通信的唯一方式" 。 当执行体之间需要相互传递消息时, 通常需要基于一个消息队列
(message queue) 或 进程邮箱(process mail box) 这样的 设施 进行通信。
5. GO 语言推荐 采用 "Erlang风格的并发模型" (参见 上面 的 4) , 尽管传统的 "共享内存模型" 仍然被保留,允许适度地使用。在GO
语言中内置了消息队列的支持,只不过它叫通道(channel)。 两个 协程 之间可以通过 channel 来进行交互
6. GO 语言引入了无比强大的 "非侵入式" 接口 的概念, 让开发这不需要继承接口,只要实现了接口对应的方法,自然就跟接口
关联起来了
7. GO语言的反射实现了反射的大部分功能,但没有像Java语言那样内置类型工厂,故而无法做到像Java那样通过类型字符串
创建对象实例。在Java中,你可以读取配置并根据类型名称创建对应的类型,这是一种常见的编程手法,但在GO语言中
这并不被推荐。