为什么要学习Go
从今天起,我们将一同启程探索 Go 语言的奥秘。我会用简单明了的方式,逐一讲解 Go 语言的各个知识点,帮助你从基础做起,一步步深化理解。不论你之前是否有过 Go 语言的接触经验,这个系列文章都将助你收获满满。
现在,让我以一个经典的例子“Hello World”来带你入门 Go 语言,了解它是如何运行起来的。
开始学习
Hello, 世界
若你曾学习过 C 语言,那么对下面这个经典示例应该颇为熟悉。借助这个例子,我将首先为你简要介绍 Go 语言的一些关键概念,帮助你初步把握 Go 语言代码的结构和风貌。以下是示例代码:
package mainimport "fmt"func main() {fmt.Println("Hello, World!")}
这五行的代码组合便形成了一个完整的 Go 程序,你会发现它非常易于理解。接下来,我将执行这段代码,让我们观察一下运行后的输出。操作步骤是打开命令行终端,输入以下指令,并按下回车键。
$ go run main.goHello, World!
当我输入命令 go run main.go
并按下回车键后,屏幕上显示的“Hello, World!”便是我们的 Go 程序运行后的输出结果。
在这里,go
是 Go 语言附带的工具链中的一个命令,它与您可能熟悉的如 ls
这样的命令行工具一样,是一个可执行程序。go
命令提供了多种功能,包括运行、编译 Go 代码,以及生成可执行文件等。
run
是 go
命令下的一个选项,它用于指示工具链执行指定的 Go 程序。而 main.go
则是我编写的 Go 代码文件。因此,整个命令 go run main.go
的含义是,使用 Go 工具链来运行 main.go
文件中的代码。
程序结构分析
为了让一个 Go 语言程序顺利执行,关键在于包含 package main
和 main
函数这两个要素。package main
指示这是一个可执行的应用程序,而 main
函数则是程序启动的入口点。
在“Hello, 世界”这个基础示例中,我们见证了 Go 语言程序的基本骨架。以下是对程序结构的逐步解析,以及 Go 语言核心概念的介绍。
首行的 package main
声明了当前文件 ch01/main.go
所属的包。在 Go 语言中,package
是声明包的关键字,而 main
是包的名称。main
包在 Go 语言中具有特殊意义,它表明你的项目是一个独立的可执行程序,而不是供其他项目引用的库。
第二行的 import "fmt"
是引入 fmt
包的声明。import
是 Go 语言的关键字,用于导入所需的包。这里我们导入了 fmt
包,以便在后续代码中使用它提供的功能。
第三行的 func main()
定义了 main
函数。func
是 Go 语言中声明函数的关键字,main
是函数名,而空括号 ()
表示该函数不接受任何参数。在 Go 语言中,main
函数是程序的入口点,程序启动时首先执行的就是 main
函数,通过它来调用其他函数以实现业务逻辑。
第四行的 fmt.Println("Hello, 世界")
是调用 fmt
包中的 Println
函数来输出文本“Hello, 世界”。要使用一个包的功能,必须先将其导入。Println
函数是 fmt
包提供的一个函数,用于在控制台上打印信息。
最后一行的大括号 }
标志着 main
函数体的结束。至此,我们完成了对这段代码的分析,执行程序后便能看到“Hello, 世界”的输出。
通过上述分析,我们可以看出 Go 语言的代码结构简洁而完整,仅凭 package
、import
和 func main
这些基本概念就能构建一个可运行的程序。
在后续,我们将进一步探讨如何使用变量、自定义函数等内容。在此之前,我们先来了解 Go 语言的开发环境如何搭建,这是运行上述 Go 代码并让程序运行起来的前提。
Go 语言环境搭建
要搭建 Go 语言的开发环境,首先需要下载 Go 语言的安装包。你可以访问 Go 官方网站 https://golang.org/dl/ 或者国内的镜像网站 https://golang.google.cn/dl/ 来下载(由于网络原因,如果无法访问国外官网,可以选择国内的镜像网站进行下载)。
在下载页面,根据你所使用的操作系统(无论是 Windows、macOS 还是 Linux)选择合适的安装包。以下是下载步骤的简要说明:
- 访问 Go 语言官方网站或国内镜像网站。
- 在下载页面中,找到适合你操作系统的 Go 版本。
- 点击相应的下载链接,下载 Go 安装包。
Windows MSI 下安装
在 Windows 系统中,MSI 安装包是一个便捷的选择,因为它提供了一个直观的安装界面,让用户能够轻松地配置 Go 语言开发环境。对于大多数现代的 Windows 操作系统,它们都是 64 位的,因此你应该下载 go1.20.windows-amd64.msi
。如果你使用的是 32 位的 Windows 系统,那么你应该选择 go1.15.windows-386.msi
。
下载并双击安装包后,你会被引导通过一系列的安装步骤。在安装过程中,你可以选择将 Go 安装到默认的 C:\Go
目录,或者根据自己的喜好选择一个不同的目录。
一旦你选择安装到 C:\Go
目录,安装程序会自动将 C:\Go\bin
目录添加到你的系统 PATH 环境变量中。这样,你就可以在任何命令提示符中直接运行 Go 命令了。如果你发现安装程序没有添加这个路径,你也可以手动将其添加到 PATH 环境变量。
手动添加步骤如下:
- 打开“控制面板”。
- 选择“系统和安全”。
- 点击“系统”。
- 在系统属性窗口中,选择“高级”选项卡。
- 点击“环境变量”按钮。
- 在环境变量窗口中,找到并选择“Path”变量,然后点击“编辑”。
- 在编辑环境变量窗口中,点击“新建”,然后输入
C:\Go\bin
。 - 点击“确定”保存更改。
- 退出所有打开的命令行窗口,然后打开一个新的命令行窗口以使更改生效。
Linux 下安装
如果要安装1.18以下的版本可以直接
sudo apt-get install golang-goyum install golang-go
第一行为Ubuntu的下载,第二行为Redhat的下载方式。
如果要通过安装包安装的话,由于Linux 系统有 32 位和 64 位,你可以根据你的 Linux 操作系统选择相应的压缩包,它们分别是 go1.20.linux-386.tar.gz 和 go1.20.linux-amd64.tar.gz。
下载成功后,需要先进行解压,假设你下载的是 go1.20.linux-amd64.tar.gz,在终端通过如下命令即可解压:
sudo tar -C /usr/local -xzf go1.20.linux-amd64.tar.gz
然后把 /usr/local/go/bin 添加到 PATH 环境变量中,就可以使用 Go 语言开发工具包了。
把下面这段添加到 /etc/profile 或者 $HOME/.profile 文件中,保存后退出即可成功添加环境变量。
export PATH=$PATH:/usr/local/go/bin
macOS 下安装
如果你的操作系统是 macOS,可以采用 PKG 安装包。下载 go1.20.darwin-amd64.pkg 后,双击按照提示安装即可。安装成功后,路径 /usr/local/go/bin 应该已经被添加到了 PATH 环境变量中,如果没有的话,你可以手动添加,和上面 Linux 的方式一样,把如下内容添加到 /etc/profile 或者 $HOME/.profile 文件保存即可。
export PATH=$PATH:/usr/local/go/bin
安装测试
安装成功后,可以打开终端或者命令提示符,输入 go version 来验证 Go 语言是否安装成功。如果成功的话,会打印出 Go 语言的版本和系统信息,如下所示:
$ go versiongo version go1.20 darwin/amd64
环境变量设置
在安装了 Go 语言开发工具包之后,虽然你已经拥有了编译和运行 Go 程序的基本能力,但还有一些重要的环境变量需要设置,以确保 Go 开发环境完整。这两个关键的环境变量是 GOPATH
和 GOBIN
。
- GOPATH:这是 Go 项目的工作目录,它在 Go Module 之前是非常重要的,现在主要用于存放使用
go get
命令获取的项目。 - GOBIN:这是 Go 编译生成的程序的安装目录。当你使用
go install
命令时,编译后的 Go 程序会被安装到GOBIN
目录中,这样你就可以在命令行中直接使用这些程序。
假设你的工作目录是 /Users/ubuntu/go
,你需要将 GOPATH
环境变量设置为 /Users/ubuntu/go
,并将 GOBIN
环境变量设置为 $GOPATH/bin
。
在 Linux 和 macOS 系统下,你可以将以下内容添加到 /etc/profile
或者你的用户目录下的 .profile
文件中,以设置这些环境变量:
export GOPATH=/Users/ubuntu/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
如果在 Windows 系统中,可以通过控制面板 -> 高级 -> 环境变量选项添加这两个环境变量。
项目结构
在 Go 语言的现代项目中,Go Module 是一个推荐的管理依赖和构建项目的工具。它允许你在项目的任何位置创建一个 Go 语言项目,而不需要依赖于全局的 GOPATH 环境变量。
假设你的项目位置是 /Users/ubuntu/goProject/,打开终端,输入如下命令切换到该目录下:
$ cd /Users/ubuntu/goProject/
可以执行如下命令创建一个 Go Module 项目, 会生成一个go.mod文件:
$ go mod init
然后在当前目录下创建一个 main.go 文件,这样整个项目目录结构是:
goProject├── go.mod├── lib└── main.go
其中 main.go 是整个项目的入口文件,里面有 main 函数。lib 目录是项目的子模块,根据项目需求可以新建很多个目录作为子模块,也可以继续嵌套为子模块的子模块。
编译发布
完成了你的 Go 项目后,你可以选择将代码编译成一个可执行文件,以便在终端中直接运行,或者将其发布到 $GOBIN
目录,以便在系统环境中直接使用。
$ go build main.go
回车执行后会在当前目录生成 main 可执行文件,现在,我们来测试下它是否可用。
$ ./main Hello, World!
如果成功打印出“Hello, World!”,证明程序成功生成。
把它安装到 $GOBIN 目录或者任意位置:
$ go install main.go
跨平台编译
在 Go 语言开发工具包中,一个令人印象深刻的功能就是它的跨平台编译能力。这意味着你可以在一个操作系统上开发代码,然后编译出可以在其他操作系统上运行的可执行程序。例如,如果你在 macOS 上开发,你可以编译出能在 Linux 或 Windows 上运行的程序。
跨平台编译允许你选择你最喜欢的操作系统作为开发环境,然后轻松地将代码编译成适合发布平台的可执行程序。
Go 语言通过两个环境变量来控制跨平台编译:
- GOOS:代表要编译的目标操作系统。常见的值有
linux
、windows
、darwin
等。 - GOARCH:代表要编译的目标处理器架构。常见的值有
386
、amd64
、arm64
等。
通过组合不同的 GOOS
和 GOARCH
值,你可以编译出适用于不同平台的可执行程序。例如,如果你在 macOS 上开发,且你的系统是 AMD64 架构,你可以这样编译出一个适用于 Linux AMD64 架构的可执行程序:
$ GOOS=linux GOARCH=amd64 go build main.go
在这个命令中:
GOOS=linux
:告诉 Go 编译器目标操作系统是 Linux。GOARCH=amd64
:告诉 Go 编译器目标处理器架构是 AMD64。go build -o linux-amd64-hello-world .
:编译当前目录下的 Go 源文件,并将输出命名为linux-amd64-hello-world
。
完成编译后,你将得到一个名为 linux-amd64-hello-world
的可执行文件,它可以在 Linux AMD64 架构的系统上运行。这样,你就可以选择在 macOS 上开发,然后编译出适用于其他平台的可执行程序,以便在不同环境中运行你的 Go 程序。
Go 编辑器推荐
在软件开发领域,选择一款合适的编辑器对于提高工作效率至关重要。今天,我想向大家推荐两款备受开发者喜爱的编辑器,它们分别是 Visual Studio Code 和 JetBrains 的 Goland。
Visual Studio Code 这款编辑器是一款由微软开发的免费开源代码编辑器,拥有丰富的插件和扩展功能。对于 Go 语言开发,Visual Studio Code 提供了专门的 Go 扩展插件,它可以帮助你更高效地编写、调试和测试 Go 代码。你可以在 Visual Studio Code 的官方网站 Visual Studio Code - Code Editing. Redefined 下载这款编辑器,并安装 Go 扩展插件来开始你的 Go 开发之旅。
Goland是一款由老牌 IDE 厂商 JetBrains 推出的 Go 语言集成开发环境。它不仅集成了所有必要的 Go 插件,还提供了一系列强大的功能,如代码补全、代码格式化、代码重构、代码导航等。Goland 适合所有水平的开发者,无论是初学者还是经验丰富的老手,都能在 Goland 中找到适合自己的开发体验。你可以在 Goland 的官方网站 GoLand by JetBrains: More than just a Go IDE 下载并安装 Goland,开始使用这款功能强大的 Go 开发工具。
选择哪款编辑器取决于你的个人偏好和需求。如果你喜欢轻量级的编辑器并且需要丰富的插件支持,Visual Studio Code 是一个不错的选择。而如果你更倾向于使用集成度更高、功能更全面的 IDE,Goland 可能会更符合你的需求。无论你选择哪款编辑器,它们都能帮助你更高效地开发 Go 语言应用程序。