Go语言的安装非常简单,官方为主流操作系统提供了便捷的安装包。
首先,请访问Go语言的官方下载页面:https://go.dev/dl/
你会看到针对不同操作系统的最新稳定版安装包。
a) Windows 用户:
.msi
格式的安装程序。C:\Program Files\Go\
),然后点击“Install”(安装)。如果没有自动设置环境变量,那需要自己设置环境变量。win+Q搜索环境变量,点击【系统环境变量】,添加GOROOT和GOPATH的值,并在Path里边加上对应的bin目录就可以啦。
b) macOS 用户:
.pkg
格式的安装程序。/usr/local/go
)。c) Linux 用户:
.tar.gz
格式的二进制包。/usr/local
(需要root权限)。cd /usr/local
sudo tar -xzf ~/Downloads/go<version>.<os>-<arch>.tar.gz
# 示例:sudo tar -xzf ~/Downloads/go1.22.2.linux-amd64.tar.gz
这条命令会将Go解压到 /usr/local/go
目录。PATH
环境变量中,以便在任何地方都能执行 go
命令。
~/.bashrc
或 ~/.zshrc
:nano ~/.bashrc # 或者 vim ~/.zshrc
export PATH=$PATH:/usr/local/go/bin
source ~/.bashrc # 或者 source ~/.zshrc
无论你使用哪种操作系统,安装完成后,打开一个新的终端或命令提示符窗口,输入以下命令:
go version
如果安装成功,你将看到类似以下的输出,显示Go的版本信息:
go version go1.22.2 linux/amd64
这意味着Go语言SDK已成功安装在你的系统上!
在Go语言的早期版本中,GOPATH
扮演着非常重要的角色。理解 GOPATH
和 GOROOT
对于理解Go语言的工作原理仍然很有帮助,即使 GOPATH
的地位在现代Go开发中已大大降低。
GOROOT
环境变量指向Go语言SDK的安装根目录。它包含了Go的编译器、标准库、工具等所有核心组件。GOROOT
找到其自身所需的资源。GOROOT
,你无需手动配置。如果你是手动解压安装(如Linux),并且将Go解压到了 /usr/local/go
,那么 GOROOT
就指向这个目录。go env GOROOT
命令来查看其当前值。GOPATH
是Go项目的核心工作目录。它是一个约定好的目录,Go工具链会在其中寻找源代码、编译后的包和可执行文件。GOPATH
通常包含三个子目录:
src/
:存放所有的Go源代码文件,每个项目或库都有自己的子目录,例如 github.com/user/project
。pkg/
:存放编译后生成的包归档文件(.a
文件),按操作系统和架构分类。bin/
:存放 go install
命令编译生成的可执行文件。GOPATH
模型存在一些固有的缺点:
GOPATH/src
下的依赖,导致不同项目可能需要同一个库的不同版本时产生冲突(“GOPATH Hell”)。GOPATH
。GOPATH/src
下的特定路径。GOPATH/src
下。 你的项目可以放在文件系统的任何位置。GOPATH
仍然存在,但其主要用途变为了:
go install
全局安装的二进制工具(例如 goimports
)。go env GOPATH
命令来查看其当前值。通常,Go会自动将其设置为用户家目录下的 go
目录(例如 ~/go
或 %USERPROFILE%\go
)。总结: 作为Go语言的初学者,你只需要确保 GOROOT
和 PATH
环境变量设置正确,并且对 GOPATH
有所了解即可。在现代Go开发中,你几乎可以忽略将项目代码放在 GOPATH
下的限制。
Go Modules 是 Go 1.11 引入并从 Go 1.13 起成为默认的依赖管理方式。它彻底解决了 GOPATH
模型中版本冲突和依赖管理混乱的问题,使得Go项目的开发变得更加独立、可预测和高效。
go.mod
文件来管理其特有的依赖版本,不再受全局 GOPATH
的限制。go.sum
文件记录了每个依赖模块的校验和,确保每次构建都使用相同的代码,提高构建的可复现性。GOPATH/src
下。Go Modules 主要通过两个文件来管理项目依赖:
go.mod
文件:
github.com/your_name/your_project
)。go 1.22
)。go.sum
文件:
go.mod
中定义的一致,确保依赖的完整性和安全性。在你的Go项目根目录中,你将经常使用以下 go mod
命令:
go mod init
: 初始化一个新的Go模块。
是你的模块的唯一标识符,通常是你项目的远程仓库路径(例如 github.com/youruser/yourproject
),或者对于本地开发可以是任意有意义的名称(例如 myfirstapp
)。执行此命令后,会在当前目录生成 go.mod
文件。go mod tidy
: 整理 go.mod
和 go.sum
文件。它会移除不再使用的依赖,并添加代码中新引入的依赖。这是管理依赖的推荐命令。go mod download
: 下载 go.mod
文件中声明的所有依赖模块到本地的模块缓存(通常位于 GOPATH/pkg/mod
)。go mod verify
: 检查下载的模块是否与 go.sum
中的校验和匹配。go mod vendor
: 将所有项目依赖的模块复制到项目根目录下的 vendor/
目录中。这使得项目在没有网络连接的情况下也能构建,并有助于实现更严格的构建隔离(尽管现在不常用,因为模块缓存已经很好地解决了这个问题)。现在,我们已经做好了所有准备,来编写并运行你的第一个Go程序。这里推荐写代码的IDE使用GoLand,集成式开发平台,配置简单,比vscode入门快,当然根据个人喜好来选择。
创建项目目录: 在你文件系统的任何位置创建一个新的目录,例如 myfirstgoapp
。
mkdir myfirstgoapp
cd myfirstgoapp
初始化Go模块: 在 myfirstgoapp
目录下,运行 go mod init
命令来初始化一个Go模块。请选择一个有意义的模块路径,这里我们使用 myfirstapp.com/hello
作为示例:
go mod init myfirstapp.com/hello
执行后,你会在 myfirstgoapp
目录下看到一个 go.mod
文件。它的内容可能类似:
module myfirstapp.com/hello
go 1.22
module
声明了你的项目模块的导入路径,go 1.22
声明了当前项目所需的Go语言版本。
在 myfirstgoapp
目录下,创建一个名为 main.go
的文件。
# 在Linux/macOS下
touch main.go
# 在Windows下
New-Item main.go
使用你喜欢的文本编辑器打开 main.go
,并输入以下代码:
package main
import "fmt"
func main() {
// 这是一行注释:使用fmt包打印文本到控制台
fmt.Println("Hello, Go! 这是我的第一个Go程序。")
fmt.Println("祝贺你成功迈出了Go语言学习的第一步!")
}
代码解释:
package main
: 声明这个文件属于 main
包。在Go语言中,main
包是一个特殊的包,它包含了可执行程序的入口点。import "fmt"
: 导入 fmt
包,这个包提供了格式化I/O(输入/输出)函数,比如打印字符串到控制台。func main() {}
: 这是程序的入口函数。Go程序在执行时会从 main
包的 main()
函数开始运行。fmt.Println(...)
: 调用 fmt
包中的 Println
函数,用于将字符串打印到标准输出(通常是控制台),并在末尾添加一个换行符。// 这是...
: Go语言中的单行注释。现在,你可以用两种主要方式来运行你的Go程序:
a) 使用 go run
命令(快速运行)
go run
命令会编译并直接运行你的程序。这对于快速测试和开发非常方便。
在 myfirstgoapp
目录下,执行:
go run main.go
# 或者,如果你在当前模块根目录,可以直接运行当前模块
# go run .
你将在终端看到输出:
Hello, Go! 这是我的第一个Go程序。
祝贺你成功迈出了Go语言学习的第一步!
b) 使用 go build
命令(编译生成可执行文件)
go build
命令会将你的源代码编译成一个独立的可执行文件。这个文件可以在没有Go环境的机器上运行(只要操作系统和架构兼容)。
在 myfirstgoapp
目录下,执行:
go build main.go
# 或者,编译当前模块
# go build .
执行后,你会发现在 myfirstgoapp
目录下多了一个可执行文件:
main
。main.exe
。你可以直接运行这个可执行文件:
./main
main.exe
你将看到相同的输出:Hello, Go! 这是我的第一个Go程序。
祝贺你成功迈出了Go语言学习的第一步!
恭喜你!你已经成功地下载、安装了Go SDK,理解了核心环境变量,掌握了Go Modules的基础知识,并且编译运行了你的第一个Go程序。
通过本篇博客,你已经:
GOPATH
和 GOROOT
这两个Go语言环境的关键变量。Go Modules
的核心概念和基本用法。Hello, Go!
。这为你深入学习Go语言打下了坚实的基础。接下来,你可以探索Go语言的更多特性,例如:
Go语言的学习之旅才刚刚开始,祝你在Go的世界中探索愉快!