Go 基础信息:什么是 Go 语言? 1 个改进

什么是 Go?

Go 的诞生

Go 语言是的出现是为了解决 Google 公司内开发软件基础设施时遇到的一些问题。—— 由多核处理器、系统的网络化、大规模计算机集群和 Web 编程模型带来的编程问题,都是以迂回的方式而不是迎头而上的方式解决的。现在的服务器程序由成百上千甚至成千上万的程序员共同编写,源代码也以数百万行计,而且实际上还需要每天都进行更新。更加雪上加霜的是,即使在大型编译集群之上进行一次 build,所花的时间也已长达数十分钟甚至数小时。

Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为 Google 公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。

2009 年 11 月 10 日,开发团队将 Go 语言项目以 BSD-style 授权(完全开源)正式公布了 Linux 和 Mac OS X 平台上的版本。同年 11 月 22 日公布了 Windows 版本。

基于 BSD 可用协议意味着这是一门完全免费开源的编程语言,所以任何人都可以进行商业软件的开发而不需要支付任何费用。

源代码托管在 GitHub 上:https://github.com/golang/go

Go 应用场景

Go 语言与 C++ 类似,属于系统编程语言。

Go 语言因为母公司 Google 公司的原因,被设计成一门应用于集群 Web 服务器或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

Go 语言一个非常好的目标就是实现所谓的复杂事件处理(CEP),这项技术要求海量并行支持,高度的抽象化和高性能。当我们进入到物联网时代,CEP 必然会成为人们关注的焦点。

但是 Go 语言同时也是一门可以用于实现通用目标的语言(General-purpose language
),例如对于文本的处理,前端展现,甚至像使用脚本一样使用它。

从 2010 年 5 月起,谷歌开始将 Go 语言投入到后端基础设施的实际开发中,例如开发用于管理后端复杂环境的项目。有句话叫「吃你自己的狗食」,这也体现了谷歌确实想要投资这门语言,并认为它是有生产价值的。

在 Google 内部,如谷歌地图、Google Cloud、 youtube.com、dl.google.com 都已经开始使用 Go 语言开发,除此之外还有一些其它小应用(有的是在GAE上)也选择使用 Go。另外内部有专门的团队在将老应用重写或引导新项目使用 Go 语言。而在 Google 之外,BBC Worldwide、Canonical、Heroku、Nokia、SoundCloud 也都在尝试 Go。

Go 语言特性

Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。

Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机,这一点对于谷歌内部的使用来说就非常重要了。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。

这个特性显然是 Go 语言最强有力的部分,不仅支持了日益重要的多核与多处理器计算机,也弥补了现存编程语言在这方面所存在的不足。

Go 语言从本质上(程序和结构方面)来实现并发编程。

因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。

Go 编程体验

如果你有其它语言的编程经历(面向对象编程语言,如:Java、C#、Object-C、Python、Ruby、PHP),在你进入到 Go 语言的世界之后,你将会像迷恋你的 X 语言一样无法自拔。Go 语言使用了与其它语言不同的设计模式,所以当你尝试将你的 X 语言的代码迁移到 Go 语言时,你将会非常失望,所以你需要从头开始,用 Go 的理念来思考

如果你在至高点使用 Go 的理念来重新审视和分析一个问题,你通常会找到一个适用于 Go 语言的优雅的解决方案。

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!