学习GO
1. 入门
1.1 简介
go语言是由3位谷歌员工设计的。最开始开发go的时候,谷歌的开发需要维护百万行需要更新的代码,将这些代码转化为程序需要花费大量的时间。最烦人的是,每个人都得经受这种痛苦。为了应对这些问题, go语言的设计初衷就是“eliminate the slowness and clumsiness of software development at Google, and thereby to make the process more productive and scalable”.
换句话说,设计go的目的是为了让开发更加的迅速和容易。它包含高级语言的特性,比如自动垃圾回收,并充分利用了计算机多核的特性,设计之初就是为了并发而生。 Go语言的特性和速度已经吸引了大量不同的程序员,包括应用开发和基础设施团队等。随着go语言的发展,我们将看到go在应用开发,网页开发,命令行开发和其他地方的实现。
在我们开始使用go之前,我们需要先过一下go的基础知识,如何读一个go程序,如何跑一个go程序。
guide for developing Go locally 配置本地环境。
1.2 编译
当我们手写go语言的时候,我们希望代码对于我们自己和别人都可读。 我们能从代码读出代码的逻辑和意图。但是,电脑并不懂我们的go代码,也无法读懂我们表达的意思。电脑只能懂二进制的0-1. 为了将我们的代码转化为二进制,也就是电脑懂的代码, go需要一个编译器,一个将go代码转化为电脑懂的代码。然后我们才能执行我们写的程序。
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
go build main.go
ls
# main main.go
./main
1.3 运行程序
为了运行我们写的程序,我们不用在编译了,只需要重新跑一下可执行文件。但是假如我们需要改一下程序,总不能每次改一点,就需要重新编译一下吧。
幸运的是,我们可以使用
go run main.py
go run 会同时执行compile和execute两种命令;这样我们就可以迅速的查看我们更改的效果。
go run 不会创建一个可执行文件。
1.4 go基础结构:package
go语言从上往下,从左往右。
package main
# 1 此行表示 申明一个包,每个go程序都这么开始,申明包告诉编译器是创建一个可执行文件还是一个库,与可执行文件相反的是,一个库并不需要执行代码 - 库只是一堆可以复用的代码而已。申明包将创建一个可执行文件。
# 2 空行,go忽略空行
import "fmt"
# 3. import 语句, import语句使得我们可以导入和使用其他包的程序,需要注意的是,包使用""双引号
func main () {
fmt.Println("Hello World")
}
包在go里面最为一个很重好的角色。它将代码组合起来,使得代码可以复用, 也方便维护。我们只需要导入我们需要使用的代码, 同时,我们的代码编译也更加的快, 因为不需要编译额外的代码或者包
1.5 go基础结构: main
func main () {
# func关键字 开始
# 后面紧跟函数名称
# (){}
fmt.Println("Hello World")
}
正常情况下, 我们的函数是不会执行的,但是main是一个特殊的函数,main包是一个特殊的包。当我们有main的时候,main函数会自动执行
1.6 导入多个包
更多时候,我们需要导入很多的包,Go标准包
import "package1"
import "package2"
import (
"package1"
"package2"
)
两种导入方式均可。需要注意的是,使用括号的时候,不需要加逗号
import (
p1 "package1"
p2 "package2"
)
导入包的时候,可以添加别名
package main
import (
"fmt"
t "time"
)
func main() {
fmt.Println(t.Now())
}
1.7 备注
备注基本和java, javascript一样
// 这是单行煮熟
/*
这是多行注释
这是多行注释
*/
1.8 额外资源
问题:
- Stack Overflow’s Go questions
- A forum of programmers answering programming questions.
- Go’s official site
- Go to the official site for documentation.
另外,go还有自己的doc系统,可以使用:
go doc fmt
go doc fmt.Println