图源:golang.google.cn
Go语言的官网是https://golang.org/,遗憾的是因为某些不可抗力,是没法正常访问的。幸运的是Google提供了一个大陆地区特供版官网,提供一些下载等基本功能,其地址是https://golang.google.cn/dl/。
这里选择对应的版本即可。
具体的安装过程没啥可说的,相当的朴实无华,连个选项都没有,我几乎没有见过类似的程序语言环境安装包。
安装完后同样需要将安装目录加入环境变量Path
:
重启命令行窗口后通过以下命令可以验证是否安装成功:
❯ go version
go version go1.17.2 windows/amd64
Go语言和PHP、Python之类的动态语言不通,是需要经过编译后才能执行的静态语言,我们可以通过官方提供的环境组件中的编译工具进行编译和执行。
先用文本编辑器创建我们第一个Go语言程序:
package main
import "fmt"
func main() {
fmt.Println("Hello world!")
}
保存为hello.go
。
在命令行执行:
❯ go run hello.go
Hello world!
这会调用编译器对源码编译,然后执行。比较奇怪的是通过run
命令执行后并不会产生编译后的可执行文件,这意味着再次执行程序就需要重新编译(即使源码没有任何改变),对于编译型语言来说这显然是不可接受的。
当然我们也可以通过go build
命令直接编译源码并产生可执行文件:
❯ go build hello.go
❯ ls -al
hello.exe
hello.go
可以看到产生了一个可执行文件hello.exe
,现在我们就可以直接通过该文件执行程序:
❯ ./hello
Hello world!
Go语言的工具包还提供类似pip
那样从网上下载第三方库的功能,前提是先要设置一下工作区目录:
这里需要将环境变量中的GOPATH
修改为你打算用作Go开发的工作目录。
基于同样不可描述的原因,还需要设置下载资源的镜像站:
go env -w GOPROXY=https://goproxy.cn,direct
可以用下面的命令测试一下:
❯ go get golang.org/x/tour
go: downloading golang.org/x/tour v0.1.0
在VSC中使用快捷键CTRL+SHIFT+P
打开命令行,输入go install update tools
:
在弹出的插件列表中勾选全部:
如果安装顺利,VSC的控制台最后会出现All tools successfully installed. You are ready to Go. :)
字样。
在介绍Go相关的学习资料时我必须先说明:在选择编程书籍或者学习资料的时候,不要盲目相信权威或者资深开发者,一定要真正阅读部分内容后自行判断该书籍是否适合自己,并不存在某本书籍适合所有人学习这种情况。同样的,也并非所有人都适合同样的学习方式,比如我个人就比较喜欢读纸质书,而非电子版或者看视频,着同样是一个因人而异的事情,所以以下仅供参考,请选择适合自己的方式进行学习。
《Go程序设计语言》
《Go程序设计语言(英文版)》的中文版,由七牛云的员工协作翻译。目前看了80%,感觉翻译质量一般,个别句子感觉生涩,需要反复阅读,但总体来说结合示例代码不会影响理解,毕竟编程学习代码依然是最重要的。总之这本书依然是其它语言程序员转Go语言的首选推荐读物,介意翻译质量的可以阅读原版,或者访问https://book.itsfun.top/gopl-zh/,这是网络上该书的一个开源翻译成果。
该书的示例代码可以在https://github.com/adonovan/gopl.io中找到。方便起见我从Github克隆了代码到Gitee:https://gitee.com/icexmoon/gopl-io。
《Head First Go语言程序设计》
饱受好评的[Head First]系列丛书出品,依然延续该书系幽默风趣、图文并茂的特点,基本涵盖了Go语言的绝大多数内容。但无论从内容的广度、深度,抑或是代码的实用性上要略逊于《Go程序设计语言》。该书更适合0基础入门学习Go语言的读者。顺带一提,该书中文版是20年第1版,相当新。
《Go Web 编程》
这本书我买了,但还没看。从网上一些评论和书籍介绍中可以看出,该书不借助其它框架,只使用Go语言自带的包,实现了一个完整Web应用,借此阐述了Go语言Web编程所需的相关技能和知识点。学习Go语言基础后可以阅读此书作为Go Web 编程的进阶学习资料。
《Go程序设计语言(英文版)》
Go语言学习的最权威教材,又被称为“Go语言圣经”(我并不喜欢这种花里胡哨的称呼)。两位作者分别是Google资深开发者和"C语言圣经"的作者。内容字字珠玑,几乎没有废话。但同样的,无论是对语言特性和机制的深入剖析还是一些实用的示例,理解起来都会有一些难度。所以并不适合新手阅读。
更多的编程类书籍推荐可以关注我的豆瓣书单编程。
Go语言圣经(中文版)
《Go程序设计语言(英文版)》的网络开源翻译项目产物,据说翻译质量是优于纸质中文版的。但版权存疑,可以用于自学,请不要制作成其他版本并传播。
Go社区Wiki
一个以Wiki形式组织的Go语言学习资料,Go语言介绍、环境安装等部分内容相当丰富,但似乎还在完善内容中。
Go 简易教程
Go社区Wiki翻译的一个开源书籍,用最短的篇幅介绍了Go的一些特性,不过因为太简短的缘故,我认为该教程并不容易理解,且可能导致一些误解,并不推荐。
官方文档
因为某些原因,并不能直接访问。但幸运的是,我们可以在本地安装并部署,像访问一个部署在本地的网站那样进行访问:
❯ go generate golang.org/x/tools/godoc/static
❯ go install golang.org/x/tools/cmd/godoc
执行上边命令后在你的$GOPATH
目录中的bin
目录下应该能看到godoc.exe
这样的可执行文件,此时将该目录加入系统环境变量Path
后在命令行执行:
❯ godoc -http=:6060
一切都正常的话你就可以通过浏览器访问本地的官方文档了:
Go语言是从C语言衍生而来,所以语言风格上是和C语言很相似的,不同的是Go在语言格式化上做的相当激进。
最显著的是在缩进和换行上,Go语言都有严格要求。此外在变量使用和包导入上,同样非常严格。
在Python中,如果引用了没有使用的包或者是有变量没有使用,是不会影响到程序的执行的,比如:
from typing import NamedTuple
message = 'How are you!'
print('hello world')
# hello world
其中的包NamedTuple
和变量message
都是不必要的,但这些都不会阻止程序的正常执行。当然可能会造成性能浪费,优秀的IDE也会通过颜色高亮来提醒你这些是可以删除的部分。但无论怎么说,大多数编程语言(如C++/Java/PHP等)都不会强制要求开发者剔除不必要的引用或者变量,但Go语言会:
package main
import "fmt"
func main() {
message := "How are you!"
fmt.Printf("Hello World")
}
// Build Error: go build -o C:\Users\70748\AppData\Local\Temp\__debug_bin2433955485.exe -gcflags all=-N -l .\hello.go
// # command-line-arguments
// .\hello.go:6:2: message declared but not used (exit status 2)
这里message
变量虽然声明并初始化,但在后续程序中并没有真正使用,所以是无效的代码,这里直接会被编译器提示message declared but not used
进而中断编译过程。事实上无效的导入也会造成同样的后果。
不过导入方面的问题不需要开发者操心,Go提供官方自动导入工具,VSC之类的IDE会自动调用该工具导入需要的包或者删除不必要的包。
在这方面Go语言是相当极端的,这样做优点和缺点同样明显。
优点是保证代码的干净高效,剔除不必要的无效代码,且可以在编译阶段发现一些不必要的bug,同时保持一致性的代码风格,让Go语言源码都具有很高的可读性。缺点是扼杀了代码的个性,可能一部分程序员初次接触后会相当的不习惯。