Golang横空出世的背景(为什么选择Go)

栏目: Go · 发布时间: 5年前

内容简介:最近十年来,C/C++在计算领域没有很好得到发展,并没有新的系统编程语言出现。对开发程度和系统效率在很多情况下不能兼得。要么执行效率高,但低效的开发和编译,如C++;要么执行低效,但拥有有效的编译,如.NET、Java;所以需要一种拥有较高效的执行速度、编译速度和开发速度的编程语言,Go就横空出世了。go是一个Google公司推出的一个开源项目(系统开发语言),它是基于编译、垃圾收集和并发的编程语言。并将其开源并在BSD许可证下发行。

起源及演进

最近十年来,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国家技术奖)

他们对系统编程语言、操作系统和并发有很深的理解。

Golang横空出世的背景(为什么选择Go)

主要特点

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

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Domain-Driven Design Distilled

Domain-Driven Design Distilled

Vaughn Vernon / Addison-Wesley Professional / 2016-6-2 / USD 36.99

Domain-Driven Design (DDD) software modeling delivers powerful results in practice, not just in theory, which is why developers worldwide are rapidly moving to adopt it. Now, for the first time, there......一起来看看 《Domain-Driven Design Distilled》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换