Go漫游笔记-01-初次见面

Go 编程语言

What is Go

官方的介绍很简单:

Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

翻译过来就是:

Go 是一个开源的编程语言,它能够让我们更加容易地构建简单、可靠、高效的软件。

从这个非常简短的介绍中,我们能够知道:

  • 首先,Go 是开源的,也就是说任何人都可以查看 Go 语言的源代码,并且,它采用的协议是 BSD ,这是一个相对自由的协议,对商业友好。
  • 其次,Go 语言的目标是用来构建简单、可靠、高效的软件。在接下来的 “旅程” 中,我们不妨以此为参照,从各个方面来考量一下它,看看它是否能够兑现自己的承诺。

发展轨迹

Go 语言从正式发布第一个版本,至今已经快有 6 年头了。
6 岁,对于人类而言,还是一个乳臭未干的年龄。
事实上,在编程语言界,这也相差无几。
如果我们按照年龄,把目前还比较活跃的语言来排个序,大概是这样子的:

序号 编程语言 出生 年龄(2015)
1 C 1972 43
2 C++ 1983 32
2 Objective-C 1983 32
4 Python 1991 24
5 Java 1995 20
5 Javascript 1995 20
5 PHP 1995 20
5 Ruby 1995 20
9 C# 2000 15
10 Node.js 2009 6
10 GO 2009 6
12 Swift 2014 1

可以看出来,Go 还算是非常年轻的 :-)

以下是 Go 发展过程中几个比较重要的里程碑:

  • 09/2007:开始设计。
  • 11/2009:正式对外发布第一个版本(发布后不久就获得了 TIOBE Hall of Fame ,也就是年度编程语言)。
  • 03/2012:发布第一个正式版本 Go 1 。

目前(09/2015)最新的版本是 Go 1.5.1 。
其在 TIOBE 排名是:第 44 位,份额为:0.254% 。

Why Go

计算机技术发展到今天,被开发出来的编程语言已经非常之多,各种语言之争在社区中也屡见不鲜。
那么,我们为什么还需要 Go 这样的一门语言呢?或者说,我们为什么要选择 Go ?
对于这个问题,Go 语言的设计者之一——罗布·派克( Rob Pike ,也是 Unix 小组的成员 )曾说道:

我们开发 Go ,是因为近 10 年来开发系统程序之难让我们有点沮丧。这时候 Go 来拯救我们啦!

这句话背后的野心很大,很明显,Go 语言的设计者希望 Go 能够取缔现在主流的编程语言,一统江湖。
但这最终能否实现,还有待时间去证明。

作为一名开发者,我们更关心:Go 究竟能解决什么问题?

在介绍 Go 的资料里面,我们经常会看到各种各样的关键词。而这些关键词则体现了 Go 语言的特性、设计思想。
下面就以一些常见的关键词为例,并针对它们做了一点粗浅的思考,接下来,我们会一直带着这些问题来学习 Go 。

  • Easy
    Go 的语法和语义设计是否足够清晰、简洁,易于上手?
    库的实现是否足够丰富,便于使用?
    编译生成的程序是否容易部署运行?
  • Fast
    是否具有更快的编译速度?
    是否具有更高的运行效率?
  • Fun
    它的趣味性体现在什么地方?
  • Productive
    它是如何使程序员更具生产力的?
  • Reliable
    在安全方面,Go 都做哪些考虑?具体的解决方案是什么?
  • Concurrent
    对并发编程的支持,相比现在主流的编程语言有什么不同?
  • Garbage-collected
    在内存管理方面,它的垃圾收集机制又有什么特别之处?
  • Build fast at scale
    它的编译机制是怎么样的?

环境配置

说了这么多,还是在纸上谈兵。
要想真正了解 Go 还是得老老实实地码几行代码才行。
在这之前,我们首先要配置好 Go 语言的开发环境。

  1. 下载 Go 发行版
    对于初学者而言,从源码安装 Go 还是有一点难度的,因此,我们首选下载二进制包。
    以 Windows 用户为例:
    在 Go 官方网站下载相应的 zip 包后,解压至:C:\Go 目录。
  2. 配置环境变量

    • 新建系统变量 GOROOT
      变量值:C:\Go(即 Go 的安装目录)

    • 编辑系统变量 path
      在变量值头部插入:%GOROOT%\bin;(不要漏掉末尾的分号“;”)

  3. 测试
    在 cmd 窗口中执行:

    1
    go verson

    如果配置正确,则会显示正确的 Go 版本信息。

第一个 Go 程序

可以使用任意一种文本编辑器,编写 Go 源代码,这里取名为 hello.go

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
fmt.Println("Hello, world!")
}

接着,就可以在 cmd 中调用 go 工具去运行它:

1
go run hello.go

屏幕中会显示:

1
Hello, world!

目前看起来还是挺简单的吧。
就开发工具的使用而言,Go 相比 Java 要略微简单一些,因为它“没有”编译( javac )的步骤。并且,在当前工作目录下,我们也看不到任何的中间文件和最终的可执行文件。
实际上,这只是 go 的 run 命令把编译、链接和运行 3 个步骤合并成 1 步了。
如果只是想编译而不运行,可以使用 go 工具的 build 命令。

更多内容