go lang标准库文档:https://studygolang.com/pkgdoc (不需要科学上网)
go lang下载:https://studygolang.com/dl (不需要科学上网)
Go简介
Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。
- 2007 年 9 月 20 日的下午,在谷歌山景城总部的一间办公室里,谷歌的大佬级程序员 Rob Pike在等待一个 C++ 项目构建的过程中和谷歌的另外两个大佬级程序员 Robert Griesemer和 Ken Thompson进行了一次有关设计一门新编程语言的讨论。
- 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
- 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。
- 企业运行维护很多c/c++的项目,C/C++程序运行速度虽然很快(因为采用静态编译),但是编译速度却很慢,同时还存在内存泄露的一系列困扰需要解决。
团队核心人员:
Ken Thompson(肯·汤普逊)
:1983年图灵奖、1998年美国国家技术奖得主,他与Dennis Ritchie是Unix系统的原创者。Thompson也发明了C语言、B语言,同时也是C语言的主要发明人。Rob Pike(罗布·派克)
: 加拿大人,曾是贝尔实验室的Unix团队和Plan 9操作计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8字符编码。(ps:Go语言的图标-gopher 囊地鼠,是Rob Pike老婆制作的)Robert Griesemer(罗伯特·格里泽默)
:曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8.
环境搭建
- 选择工具:vscode
- SDK下载:
- 需科学上网:https://go.dev/dl/
- 无需科学上网:https://studygolang.com/dl
- 建议选择稳定版本下载,如下图:
根据自己的环境选择合适的下载。我选择
go1.23.1.darwin-amd64.tar.gz
,解压后,目录中有以下内容:
1 2 3CONTRIBUTING.md README.md api doc misc test LICENSE SECURITY.md bin go.env pkg PATENTS VERSION codereview.cfg lib src
- api:该目录包含与 Go 语言的 API 相关的信息和定义。它记录了不同版本的 Go 语言所支持的公共 API,方便开发者查看每个版本中的 API 变化。
- bin:这个目录通常用于存放 Go 编译器和工具的可执行文件。通过安装 Go 语言工具链后,开发者可以使用
bin
目录下的命令行工具如go
。- lib:该目录包含 Go 运行时所依赖的库文件。开发者在编译 Go 项目时,
lib
目录中的库文件会被加载以支持程序的运行。- src:这是 Go 语言的核心源码目录,包含了所有 Go 语言的标准库、工具链和核心功能的实现。
src
是 Go 语言开发的核心部分,开发者可以在这里查看 Go 语言的源代码。- doc:该目录包含 Go 语言的官方文档。开发者可以在这里找到关于 Go 语言的设计文档、用户指南和参考手册等内容,是学习和理解 Go 语言细节的重要资源。
测试SDK环境是否搭建成功:
首先配置环境变量。
查看当前shell是zsh还是bash, 如果是bash选择编辑~/.bash_profile
文件,如果是zsh选择编辑~/.zshrc
文件
1
2
(base) apple@appledeMacBook-Pro go % dscl . -read /Users/$USER UserShell
UserShell: /bin/zsh
需要设置GOROOT, GOPATH, PATH三个环境变量。例如:
1
2
3
4
5
6
7
export GOROOT=/usr/local/Cellar/go/1.16.5/libexec
export GOPATH=$HOME/go
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
export GOROOT=/Applications/Develop/go_sdk/go
export GOPATH=$HOME/go
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
GOROOT路径是go的安装路径,一般是/usr/local/go或者 /usr/local/Cellar/go/1.16.5/libexec,如果不知道是安装到了哪个目录可以通过brew list go来查看。
brew list go可以查看go的安装目录(如果你是通过brew来安装的话)
GOPATH是以后打算把包存放的路径,可以随便写一个自己想写的路径。
将$GOPATH/bin
加入 $PATH 变量,这样在终端的任何路径都能使用go包的bin目录下面的工具,不需要进入到bin目录或者指定目录,比较方便。
最后注意source以下:
1
2
source ~/.bash_profile # 如果是bash
source ~/.zshrc # 如果是zsh
测试环境是否安装成功(在任何目录下):
1
2
3
(base) apple@appledeMacBook-Pro go_sdk % go version
go version go1.23.1 darwin/amd64
(base) apple@appledeMacBook-Pro go_sdk %
在vs code中书写一个hello world:
1
2
3
4
5
package main
import "fmt"
func main(){
fmt.Println("Go!!!")
}
保存然后编译:
1
go build test.go
会生成一个可执行文件:
如果是windows会生成XXX.exe
然后执行:
1
./test
编译+执行的命令:
1
go run test.go
总结:
两种方式的比较:
- 使用
go build
命令
- 优点:
- 生成了一个独立的二进制文件,可以分发到其他环境中运行,无需安装 Go 环境。
- 编译后执行时不需要再次编译,运行效率较高。
- 使用
go run
命令
- 优点:
- 编译和执行是一体的,不需要生成中间的可执行文件,操作简单。
- 适合快速测试和开发过程中调试代码。
- 适合开发阶段的快速调试和测试,省去了中间生成文件的步骤。
- 缺点:
1 2 - 每次执行都需要先编译,运行速度可能比生成二进制文件后执行稍慢。(时间更长) - 无法生成可分发的可执行文件,程序只能在安装有 Go 环境的机器上运行。
最后关于go语言记录几点:
- 1.
.go
是文件扩展名 - 2.严格区分大小写
- 3.每行结尾不需要分号(java需要),其实是因为go语言会在每行之后自动加分号,这体现go的简洁
- 4.go编译的时候是一行一行编译的,不建议多行语句写在一行。(如果实在要多行写成一行,就自己加分号,最后一句不用加分号)
- 5.导包多余或者定义多余的变量(导的包没有用,或者定义的变量没有用)编译不会通过,这也体现了go语言的简洁性
go的注释与代码风格
单行注释://
,多行注释:/**/
(vs code快捷键是shift+option+a
)
代码风格说明:
-
缩紧
-
补充:格式化命令gofmt
1 2
gofmt test.go # 不会写入到源文件 gofmt -w test.go # 会把格式写入到源文件
- 成对编程
- 注意运算符两边有空格(优美)
- 以下写法错误:
- 编译会报错:
syntax error: unexpected semicolon or newline before {
- 以上写法CPP和java都是对的,但是go就不行。因为go的设计者希望开发者有统一的代码风格,一个问题尽量只有一个解决方案是最好的。
- 一行不要超过80个字符