Go语言上手简单

Go语言语法简单易懂,学习曲线平缓,不需要像 C/C++语言动辄需要两到三年的学习期。Go语言被称为“互联网时代的C语言”。互联网的短、频、快特性在Go语言中体现得淋漓尽致。一个 熟练的开发者只需要短短的一周时间就可以从学习阶段转到开发阶段,并完成一个高并发的服务器开发。

Go语言是 Google 公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。所以它是一门类型安全的语言,加上通过构建到本地代码,程序的执行速度也非常快。

Go语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,从而使编程变得更加有乐趣,而不是在艰难抉择中痛苦前行。

Go语言在拥有一些动态语言的特性的同时,其语法风格类似于C语言。在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有 for 一种表示方法,就可以实现数值、键值 等各种遍历。因此,Go语言上手非常容易。

很多读者表示自己是在看了介绍后才开始了解这门语言的,他们一般也会使用两到三门编程语言。Go语言对于他们来说,也就是一到两天的熟悉过程,之后就可以开始使用Go语言解决具体问题 了,大约一周左右已经可以使用Go语言完成既定的任务了。

Go语言这种从零开始使用到解决问题的速度,在其他语言中是完全不可想象的。学过 C++ 的朋友都知道,一到两年大强度的理论学习和实战操练也只能学到这门语言的皮毛,以及知道一些基 本的避免错误的方法。

那么,Go语言到底有多么简单?下面通过实现一个 HTTP 服务器来了解一下。

【实例】HTTP 文件服务器是常见的 Web 服务之一。开发阶段为了测试,需要自行安装 Apache 或 Nginx 服务器,下载安装配置需要大量的时间。使用Go语言实现一个简单的 HTTP 服务器只 需要几行代码,如下所示。

package main   //标记当前文件为 main 包,main 包也是 Go 程序的入口包。

import ( //导入 net/http 包,这个包的作用是 HTTP 的基础封装和访问。

"net/http"
)
func main() { //程序执行的入口函数 main()。
http.Handle("/", http.FileServer(http.Dir("."))) //使用 http.FileServer 文件服务器将当前目录作为根目录(/目录)的处理器,访问根目录,就会进入当前目录。

http.ListenAndServe(":8080", nil) //默认的 HTTP 服务侦听在本机 8080 端口。
}

 把这个源码保存为 main.go(Go语言的源文件后缀就是.go),安装Go语言的开发包(后续我们会讲解如何安装),在命令行输入如下命令:

$ go run main.go

在浏览器里输入http://127.0.0.1:8080即可浏览文件,这些文件正是当前目录在HTTP服务器上的映射目录。

Go语言工程结构简单

Go语言的源码无须头文件,编译的文件都来自于后缀名为.go的源码文件

Go语言无须解决方案、工程文件和 Make File,只要将工程文件按照 GOPATH 的规则进行填充,即可使用 go build/go install 进行编译,编译完成的二进制可执行文件统一放在 bin 文件夹 下。

Go语言编译速度快

Go语言可以利用自己的特性实现并发编译,并发编译的最小元素是包。从 Go 1.9 版本开始,最小并发编译元素缩小到函数,整体编译速度提高了 20%。

Go语言代码风格清晰、简单

Go语言语法类似于C语言,因此熟悉C语言及其派生语言(C++、C#、Objective-C 等)的人都会迅速熟悉这门语言。

C语言的有些语法会让代码可读性降低甚至发生歧义。Go语言在C语言的基础上取其精华,弃其糟粕,将C语言中较为容易发生错误的写法进行调整,做出相应的编译提示。
 

1) 去掉循环冗余括号 

Go语言在众多大师的丰富实战经验的基础上诞生,去除了C语言语法中一些冗余、烦琐的部分。下面的代码是C语言的数值循环:

1. // C语言的for数值循环
2. for(int a = 0;a<10;a++){
3. // 循环代码
4. }

在Go语言中,这样的循环变为:

1. for a := 0;a<10;a++{
2. // 循环代码
3. }

for 两边的括号被去掉,int 声明被简化为:=,直接通过编译器右值推导获得 a 的变量类型并声明。

2) 去掉表达式冗余括号 

同样的简化也可以在判断语句中体现出来,以下是C语言的判断语句:

1. if (表达式){
2. // 表达式成立
3. }

 在Go语言中,无须添加表达式括号,代码如下:

1. if 表达式{
2. // 表达式成立
3. }

3) 强制的代码风格

Go语言中,左括号必须紧接着语句不换行。其他样式的括号将被视为代码编译错误。这个特性刚开始会使开发者有一些不习惯,但随着对Go语言的不断熟悉,开发者就会发现风格统一让大家在阅读代码时把注意力集中到了解决问题上,而不是代码风格上.

同时Go语言也提供了一套格式化工具。一些Go语言的开发环境或者编辑器在保存时,都会使用格式化工具对代码进行格式化,让代码提交时已经是统一格式的代码。

4) 不再纠结于 i++ 和 ++i

C语言非常经典的考试题为:

1. int a, b;
2. a = i++;
3. b = ++i;

这种题目对于初学者简直摸不着头脑。为什么一个简单的自增表达式需要有两种写法?

在Go语言中,自增操作符不再是一个操作符,而是一个语句。因此,在Go语言中自增只有一种写法:

i++

 如果写成前置自增++i,或者赋值后自增a=i++都将导致编译错误。