Go 语言背景及特点

起源及演进


最近十年来,C/C++ 在计算领域没有很好得到发展,并没有新的系统编程语言出现。对开发程度和系统效率在很多情况下不能兼得。要么执行效率高,但低效的开发和编译,如 C++;要么执行低效,但拥有有效的编译,如 .NET、Java;所以需要一种拥有较高效的执行速度、编译速度和开发速度的编程语言,Go 就横空出世了。

Go 是一个 Google 公司推出的一个开源项目(系统开发语言),它是基于编译、垃圾收集和并发的编程语言。并将其开源并在BSD许可证下发行。

Go 最初的设计由 Robert Griesemer,Rob Pike 和 Ken Thompson 在2007年9月开始的,官方的发布是在2009年11月。2010年5月由 Rob Pike 公开的将其运用于google内部的一个后台系统。目前在 Google App Engine 也支持 Go 语言(目前仅支持三种:Java、Python 和 Go)

Go 可以运行在 Linux, Mac OS X, FreeBSD, OpenBSD, Plan 9 和 Microsof windows 系统上,同时也支持多种处理器架构:I386, AMD64 和 ARM

(注:官方网站:http://golang.org)

Robert Griesemer:曾协助制作Java的HotSpot编译器和Chrome浏览器的JavaScript引擎V8
Rob Pike:曾是贝尔实验室的Unix团队和Plan9操作系统计划成员,与Thompson工同创造了UTF-8字符编码
Ken Thompson:是C语言和Unix的创造者。(1983年图灵奖和1988国家技术奖)
他们对系统编程语言、操作系统和并发有很深的理解。



主要特点

Go 被设计为21世纪的C语言,它属于C语言家族,比如:C/C++、Java 和 C#,同时它吸收了很多现在编程语言的优点。
对 Go 的并发机制是源于CSP(Communication Sequential Processes),这同样的机制也被于 Erlang。
对 C、C++ 相比,其语法得到了很大程序上的简化,使代码更简明、清楚,同时拥有动态语言的一些特点

基于 BSD 完全开源,所以能免费的被任何人用于适合商业目的。
语言层面对并发的支持(goroutine:独立于 OS 的线程,所以多个 goroutine 可以运行在一个 OS 的线程里,也可以分布到多个 OS  线程里。goroutine 是从 OS 线程上抽象出来的一个轻量级的基于 CSP 的协程)
在语言层面加入对并发的支持,而不是以库的形式提供
更高层次的并发抽象,而不是直接暴露 OS 的并发机制.
多个 goroutine 间是并行的。
底层混合使用非阻塞IO和线程

主要目的

  • 融合效率、速度和安全的强类型的静态编译语言,同时能够容易的进行编程,让编程变得更有乐趣。
  • 较少的关键字和简洁的语法
  • 类型安全和内存安全:在指针类型,但不允许对指针进行操作。
  • 支持网络通信、并发控制、并行计算和分布式计算。
  • 在语言层面实现对多处理器(或多核)进行编程
  • 内嵌运行时反射机制。
  • 可以集成 C 语言实现的库


它不是传统意义上的面向对象语言(没有类的概念),但它有接口(interface),由此实现多态特性。
函数(Function)是它的基本构成单元(也可以叫着面向函数的程序设计语言)是一种静态类型和安全的语言,将其编译、连接成本地代码(拥有高效的执行效率)支持交叉编译,并采用编译的编码:UTF-8

应用领域


它最初的构想是作为一个系统编程语言,但目前也被用于像Web Server,存储架构等这类分布式、高并发系统中。当然也可以用于一般的文字处理和作为脚本程序。

Go 的编译器作为 Native Client 被内嵌到 Chrome 浏览器中,可以被 Web 应用程序用来执行本地代码;同时 Go 也可以运行在Intel 和 ARM 的处理器上。

目前已被 Google 集成到 Google APP Engine 中,在基于 Google App Engine 基础设施的 Web 应用中也得到了很好的应用。目前 GAE 中仅支持三种应用程序开发语言:Java、Python和Go。(注:GAE的链接)

但不适合应用到对实时性要求很高的系统中,因为Go的内存模型是基于垃圾回收机制和原子内存分配。


目前缺少的一些特性


目前Go对OO中涉及到的一些特点还没有很好的支持,但可能会在以后进一步完善。

  • 没有函数和操作符的重载
  • 不支持隐式类型转换, 避免产生Bug和迷惑。
  • 不支持类和继承。
  • 不支持动态代码加载
  • 不支持动态库
  • 不支持泛型


总结


Go语言的主要特点
  • 强调简单、易学
  • 内存管理和语法简单
  • 快速编译
  • 并发支持
  • 静态类型
  • 部署简单(go install)
  • 自身就是文档(通过godoc将代码中的注释信息构造成文档)
  • 开源免费(BSD licensed)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。