「Go」(又称:Golang)是一种怎样的编程语言?

2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语言来取代C++, 这就是Golang。

1特点

  • 编译型语言,有比较充分的编译期检查。
  • 强类型语言,安全,速度快。
  • 严格区分值和指针。
  • 机器码目标编译器,不依赖虚拟机。
  • 类C逻辑,很多特性与C语言一脉相承,又有很多现代化改进。
  • 支持多返回值。
  • 有GC。
  • 协程模型,屏蔽了os线程概念,抽象了多线程软件开发。
  • 基于消息传递的通信方式。
  • 支持反射。
  • defer善后处理方式。
  • 支持嵌入C语言,汇编语言。
  • 跨平台,arm,mips,x86,win,linux,macos,freebsd,设计本身对新平台扩展也很友好。
  • 原生支持跨平台交叉编译。
  • 用tags代替了C中的宏,更易读,易管理。
  • 统一代码风格,全世界的go代码读起来都像自己写的。
  • 编译速度非常快,在编译成机器码的语言中来说,有当年delphi的感觉。
  • 完善的工具链,编译,调试,测试,文档,性能分析,代码管理,模块管理,版本管理,全部自带,不依赖第三方。
  • 面向工程的语言,没有太多新潮的功能。
  • 默认UTF-8编码。

2.优势

  • 有C基础的话,学习成本极低。
  • 自带功能非常丰富的标准库,许多高级功能基本不需要找三方库。
  • 语言和编译期已经稳定,版本升级很谨慎,持续保持兼容性。
  • 运行速度快占用资源少,运行速度不输主流的java/c,占用资源却少很多。
  • 不需要考虑内存泄露的C语言?
  • 实施简单,通常只需要copy一个可执行文件。
  • 与C语言结合机制简单,相比JNI。
  • 机器码目标程序增加了破解和反编译难度。
  • 只有一套标准和知识,起码目前还没有分裂。
  • 交叉编译特别简单方便。

3.劣势

  • 没有真正的面向对象,有类C风格基本的对象和接口组合功能。
  • 错误处理比较原始(官方认为这样很好),逻辑控制需要耗费更多精力。
  • 目前还没有泛型。(go社区还在讨论,可能在2019年6月前确定是否支持)
  • 包依赖要求比较严格的C风格,管理不当容易产生循环依赖错误。
  • 没有动态特性,一切都在编译期定了。
  • 需要精细粒度控制资源的领域无法取代C。
  • 编译时要求拥有全部源代码,没开放类似c的lib功能。
  • 三方包著名的较少,选择困难,很多问题还要自己来。
  • 官方没有提供GUI开发包,虽然有一些开源实现,但还不适合任复杂图形界面开发。
  • 移动前端开发还不成熟。
  • 自带模板引擎功能很弱,不是很好用,一般需要自行扩展。
  • 相比java,没那么适合堆集木。
  • 生态中的三方lib很多还不那么不完善(相比java)。

4.主要用在哪些场景?

有C的支持,用在哪里都可以,不过用在最多的地方是是开发网络服务,应用服务,命令行工具。

目前几乎所有著名互联网公司都在大量使用,小公司也很多。但是相对还不如java,python,C/C++等老牌语言流行。

云风:我发现我花了四年时间锤炼自己用 C 语言构建系统的能力,试图找到一个规范,可以更好的编写软件。结果发现只是对 Go 的模仿。缺乏语言层面的支持,只能是一个拙劣的模仿。

原创文章 「Go」(又称:Golang)是一种怎样的编程语言?,版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/202210171.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注