对一门语言有良好的整体认识是很重要的,无论是学术或者是工程

为什么要创造Go


在Go之前,已经有了各种程序设计语言,无论是C、Java这些C系语言,乃至于JavaScript等动态语言,但开发者始终有着更多的要求:更高的性能、更高的开发效率等。所以Go语言为了解决这些问题做到了平衡:快速编译,高效执行,易于开发。当然这和Go良好的社区也分不开(吐槽一下PHP的社区生态)

Go语言的轮廓


  1. Go是一门类型安全和内存安全的语言
    1. Go看到了静态语言的安全高效,以及动态语言的易开发性,对它们进行了结合
    2. 虽然Go语言存在指针,但不允许进行指针运算
  2. Go对于网络通信、并发并发有着强大支持
    1. 时代已经变了,一门天然符合现在分布式环境以及多核CPU的语言对开发者而言具有着强大的魔力
  3. Go语言的构建速度(编译和链接到机器代码的时间)极快
    1. 解决了C++的痒点(从产品的角度看,我认为构建速度又痒又痛……)
  4. Go采用了包模型提供良好的依赖管理
    1. 依赖管理已经是工程中非常重要的一环了,方便快捷
  5. Go语言的执行速度可以和C/C++相比较
    1. 虽然我不知道是怎么做到的-_-
  6. Go语言运行在某种意义上的虚拟机,实现了垃圾回收
    1. 不得不说,Go的特性真是开发者友好啊

      指导设计原则


  • Go语言大大减少了关键字的数量,从而减少、简化了编码的工作量,非常好地提升了程序的编译效率
  • 以人为本。或许对于程序设计语言的需求正在慢慢发生改变,开发者当然喜欢各种各样现成的轮子来帮助开发,但是过多的选择不仅让我在开发时感到犹豫,也对我阅读别人的代码造成了困惑。Go语言的简洁性对代码的可读性有着一定程度上的、天然的约束
  • LALR是Go语言的语法标准(早忘了…),在src/cmd/internal/gc/go.y中可以查看,这种语法标准在编译时不需要符号表协助解析

    关于特性缺失


该部分内容未经验证,因为其时效性可能已经过时,待亲自验证

  • 不支持函数重载和操作符重载
    • 简化设计,可以理解,应用场景并没有想象中那么广
  • 不支持隐式转换
    • 避免混乱,但是也没那么方便了
  • 放弃类和类型的继承,通过独特的方式来实现面向对象设计
    • 没用过,不好说
  • 本身不支持变体类型
    • 不过在接口的使用方面可以实现类似变体类型的功能
  • 不支持动态加载代码
  • 不支持动态链接库
  • 不支持泛型
  • recoverpanic 代替了异常机制
  • 不支持 static 静态变量

建议看一看Go常见问题讨论 ,官方解答

conclusion:Go的优势


  • 语法简单,开发效率高
  • 代码执行高效
  • 天生支持高并发
  • 易于部署
  • 标准类库,规范统一