Go语言概述
# Go语言基础语法
# 1. Go语言概述
Go语言,我们可以简单地写成Golang。
Go语言是谷歌2009年发布的第二款开源编程语言,它专门针对多处理器系统应用程序的编程进行了优化,它是一种系统语言其非常有用和强大,其程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go语言之父:
Thompson:1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言。
Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8 字元编码。
Robert Griesemer:曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。
Go语言的吉祥物,金花鼠gordon
# 1.1 Golang的功能特点
Go语言保证了既能达到静态语言的安全和性能,又达到了动态语言开发维护的高效率
Go语言设计是让软件充分发挥多核心处理器同步多工的优点,语言层面天生支持并发,可解决面向对象程序设计面临的麻烦。
Go的速度也非常快,几乎和C或C++程序一样快,且能够快速制作程序。
Go支持面向对象,而且具有真正的闭包(closures)和反射 (reflection)等功能。
Go语言可以在不损失应用程序性能的情况下降低代码的复杂性。
Go语言的另一项与网络相关的特色,是服务器和用户端设备,如PC或手机,可以分担工作。因此,使用Go的服务便可轻松适应不同的用户端处理性能。
Go可以和Native Client配合使用,Go可以让应用完美的运行在浏览器内。例如,使用Go可以更高效的实现Wave,无论是在前端还是后台。
函数可以返回多个值
# 1.2 Golang的应用领域
# 1.2.1 区块链的应用开发
区块链技术,简称BT(Blockchain technology),也被称之为分布式账本技术,是一种互联网数据库技术,其特点是去中心化、公开透明,让每个人均可参与数据库记录。
# 1.2.2 后台的服务应用
美团后台流量支撑程序
应用范围:支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标(qps,latency)等功能
仙侠道
应用范围:游戏服务器(通讯、逻辑、数据存储)
# 1.2.3 云计算/云服务后台应用
盛大云CDN(内容分发网络)
应用范围:CDN的调度系统、分发系统、监控系统、短域名服务,CDN内部开放平台、运营报表系统以及其他一些小工具等
京东消息推送云服务/京东分布式文件系统
应用范围:后台所有服务全部用go实现
# 1.3 Golang 的开发工具
- VS code:默认提供go语言的高亮,安装go语言插件后还可以支持智能提示,编译运行等功能
- LiteIDE:一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE),由QT编写。
- Sublime Text:Sublime Text 3(以下简称Sublime)+ GoSublime + gocode + MarGo的组合。
- Vim:Vim是从vi发展出来的一个文本编辑器,享有“编辑器之神”的称号。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
- Emacs:Emacs是由GNU开源组织开发出来的一个文本编辑器,同时更是一个整合环境,曾被人戏称“一个伪装成编辑器的操作系统”。
- Eclipse:Eclipse也是非常常用的开发利器,可以使用Eclipse来编写Go程序。
- IntelliJ IDEA:熟悉Java的读者应该对于idea不陌生,idea是通过一个插件来支持go语言的高亮语法,代码提示和重构实现
# 2. Go 语言环境安装
# 2.1 Go 语言 SDK 安装
Go 语言支持以下系统:
- Linux
- FreeBSD
- Mac OS X(也称为 Darwin)
- Window
安装包下载地址为:https://golang.google.cn/dl/
直接傻瓜式安装
# 2.2 验证是否安装成功
在Windows中安装会自动配置环境变量
打开cmd,输入go version
,当能看到返回的go语言版本即安装成功
# 2.3 Go 标准命令概述
Go语言中包含了大量用于处理Go语言代码的命令和工具。其中,go命令就是最常用的一个,它有许多子命令。这些子命令都拥有不同的功能,如下所示。
- build:用于编译给定的代码包或Go语言源码文件及其依赖包。
- clean:用于清除执行其他go命令后遗留的目录和文件。
- doc:用于执行godoc命令以打印指定代码包。
- env:用于打印Go语言环境信息。
- fix:用于执行go tool fix命令以修正给定代码包的源码文件中包含的过时语法和代码调用。
- fmt:用于执行gofmt命令以格式化给定代码包中的源码文件。
- get:用于下载和安装给定代码包及其依赖包(提前安装git或hg)。
- list:用于显示给定代码包的信息。
- run:用于编译并运行给定的命令源码文件。
- install:编译包文件并编译整个程序。
- test:用于测试给定的代码包。
- tool:用于运行Go语言的特殊工具。
- version:用于显示当前安装的Go语言的版本信息。
# 2.4 Go 语言SDK的目录结构
# 3. 第一个 Go 程序
# 3.1 Hello Go
// hello.go
package main
import "fmt"
func main() {
fmt.Println("Hello Go!")
}
2
3
4
5
6
7
# 3.2 代码分析
每个Go源代码文件的开头都是一个package声明,表示该Go代码所属的包。包是Go语言里最基本的分发单位,也是工程管理中依赖关系的体现。
要生成Go可执行程序,必须建立一个名字为main的包,并且在该包中包含一个叫main()的函数(该函数是Go可执行程序的执行起点)。
Go语言的main()函数不能带参数,也不能定义返回值。
在包声明之后,是一系列的import语句,用于导入该程序所依赖的包。由于本示例程序用到了Println()函数,所以需要导入该函数所属的fmt包。
所有Go函数以关键字func开头。一个常规的函数定义包含以下部分:
func 函数名(参数列表)(返回值列表) { // 函数体 }
1
2
3Go程序的代码注释与C++保持一致,即同时支持以下两种用法:
/* 块注释 */ // 行注释
1
2Go程序并不要求开发者在每个语句后面加上分号表示语句结束,这是与C和C++的一个明显不同之处。
**注意:**强制左花括号 { 的放置位置,如果把左花括号 { 另起一行放置,这样做的结果是Go编译器报告编译错误。
# 3.3 命令行运行程序
新建hello.go程序,在对应路径打开cmd
# 3.3.1 先编译后执行
输入go build hello.go
编译,再输入hello.exe
运行

# 3.3.2 直接执行
输入go run hello.go
直接编译运行

# 3.3.3 两种执行方式的区别
如果先编译生成可执行文件,该可执行文件可以在没有go开发环境的机器上运行
如果直接编译运行,那么如果要在另外一个机器上运行,也需要go开发环境
在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以可执行文件会变大很多
通过 go build 对 go 文件进行编译,可以指定生成的可执行文件名
如果程序有错误,编译时会在错误的那行报错,有助于程序员调试错误。
# 4. Go 程序开发的注意事项
- Go 源文件以“go”为拓展名
- Go 应用程序的执行入口是main()函数
- Go 语言严格区分大小写
- Go 方法由一条条语句构成,每个语句后不需要分号(Go 语言会在每行后自动加分号),这也体现了Golang的简洁性
- Go 编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一行,否则报错
- Go 语言定义的变量或者导入的包如果没有使用到,代码编译不能通过
- 大括号都是成对出现的,缺一不可
# 5. Go 语言常用的转义字符(escape char)
# 5.1 转义字符
转义字符 | 含义 |
---|---|
\t | 一个制表位,实现对齐的功能 |
\n | 换行符 |
\\ | 一个\ |
\" | 一个" |
\r | 一个回车,后面的内容从当前行的最前面开始输出,覆盖前面的内容 |
# 5.2 示例
package main
import "fmt" // fmt包中提供格式化,输入,输出的函数
// 转义字符的使用
func main() {
// \t 制表符
fmt.Println("tom\tjack")
// \n 换行符
fmt.Println("hello\nworld")
// \\ 一个\
fmt.Println("C:\\Users\\Administrator\\Desktop\\Go语言核心编程课程\\资料")
// \" 一个"
fmt.Println("tom说\"i love you\"")
// \r 回车,后面的内容从当前行的最前面开始输出,覆盖掉前面的内容
fmt.Println("天龙八部雪山飞狐\r张飞")
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 5.3 练习
要求:请使用一句输出语句,达到输入如下图形的效果:
代码:
package main
import "fmt"
// 这是一个main函数,是程序入口
func main() {
// 要求:请使用一句输出语句,达到输入如下图形的效果:
// 姓名 年龄 籍贯 住址
// john 12 河北 北京
fmt.Println("姓名\t年龄\t籍贯\t住址\njohn\t12\t河北\t北京")
}
2
3
4
5
6
7
8
9
10
# 6. 规范的代码风格
Go 官方推荐使用行注释来注释整个方法和语句
使用正确的缩进
可以使用
gofmt 文件名
进行格式化,使用gofmt -w 文件名
将格式化后的内容写入文件。运算符两边习惯性各加一个空格。比如:2 + 4 * 5。
Go 语言的代码风格,例如左大括号 { 的位置不能另起一行,否则会报错。
一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅
# 7. Go 语言官方编程指南
中文版 Go 语言官方编程指南 (opens new window)
里面可以切换语言
# 8. Go 语言标准库API文档
API:application program interface:应用程序编程接口。
Go 语言标准库API文档 (opens new window)