为什么要创造Go
在Go之前,已经有了各种程序设计语言,无论是C、Java这些C系语言,乃至于JavaScript等动态语言,但开发者始终有着更多的要求:更高的性能、更高的开发效率等。所以Go语言为了解决这些问题做到了平衡:快速编译,高效执行,易于开发。当然这和Go良好的社区也分不开(吐槽一下PHP的社区生态)
Go语言的轮廓
- Go是一门类型安全和内存安全的语言
- Go看到了静态语言的安全高效,以及动态语言的易开发性,对它们进行了结合
- 虽然Go语言存在指针,但不允许进行指针运算
- Go对于网络通信、并发并发有着强大支持
- 时代已经变了,一门天然符合现在分布式环境以及多核CPU的语言对开发者而言具有着强大的魔力
- Go语言的构建速度(编译和链接到机器代码的时间)极快
- 解决了C++的痒点(从产品的角度看,我认为构建速度又痒又痛……)
- Go采用了包模型提供良好的依赖管理
- 依赖管理已经是工程中非常重要的一环了,方便快捷
- Go语言的执行速度可以和C/C++相比较
- 虽然我不知道是怎么做到的-_-
- Go语言运行在某种意义上的虚拟机,实现了垃圾回收
- Go语言大大减少了关键字的数量,从而减少、简化了编码的工作量,非常好地提升了程序的编译效率
- 以人为本。或许对于程序设计语言的需求正在慢慢发生改变,开发者当然喜欢各种各样现成的轮子来帮助开发,但是过多的选择不仅让我在开发时感到犹豫,也对我阅读别人的代码造成了困惑。Go语言的简洁性对代码的可读性有着一定程度上的、天然的约束
- LALR是Go语言的语法标准(早忘了…),在src/cmd/internal/gc/go.y中可以查看,这种语法标准在编译时不需要符号表协助解析
关于特性缺失
该部分内容未经验证,因为其时效性可能已经过时,待亲自验证
- 不支持函数重载和操作符重载
- 简化设计,可以理解,应用场景并没有想象中那么广
- 不支持隐式转换
- 避免混乱,但是也没那么方便了
- 放弃类和类型的继承,通过独特的方式来实现面向对象设计
- 没用过,不好说
- 本身不支持变体类型
- 不过在接口的使用方面可以实现类似变体类型的功能
- 不支持动态加载代码
- 不支持动态链接库
- 不支持泛型
- 用
recover
和panic
代替了异常机制 - 不支持
static
静态变量
建议看一看Go常见问题讨论 ,官方解答
conclusion:Go的优势
- 语法简单,开发效率高
- 代码执行高效
- 天生支持高并发
- 易于部署
- 标准类库,规范统一