GO语言初学之前,几个必要基础命令的简单介绍与使用例
在go语言初学过程中,其一些默认设置可能会对习惯C++单文件编译执行模式的学习者产生干扰。我们可以通过go env命令修改环境变量的默认设置之后再采用go build或go run命令对单个go文件编译执行的方式来较为方便地学习go语言基础语法,同时暂时忽略与现阶段无关的更高阶项目工程管理概念。以下将对这三个命令做简要的介绍。其他相对进阶一点(但是也需要掌握)的命令放在后面一部分。
go env
该命令用于查看当前运行环境下go语言配置的相关环境变量信息,这里只列出来一小部分。其中GO111MODULE变量默认值是auto,即启用1.11版本引入的模块依赖机制(需要go.mod)。这里由于初学go语言缘故,将其值改为off,可以更加方便地对单个文件运行观察。
go env
go env -w GO111MODULE=off // 修改单个环境变量的值
GO语言初学之前,几个必要基础命令的简单介绍与使用例
在go语言初学过程中,其一些默认设置可能会对习惯C++单文件编译执行模式的学习者产生干扰。我们可以通过go env命令修改环境变量的默认设置之后再采用go build或go run命令对单个go文件编译执行的方式来较为方便地学习go语言基础语法,同时暂时忽略与现阶段无关的更高阶项目工程管理概念。以下将对这三个命令做简要的介绍。其他相对进阶一点(但是也需要掌握)的命令放在后面一部分。
go env
该命令用于查看当前运行环境下go语言配置的相关环境变量信息,这里只列出来一小部分。其中GO111MODULE变量默认值是auto,即启用1.11版本引入的模块依赖机制(需要go.mod)。这里由于初学go语言缘故,将其值改为off,可以更加方便地对单个文件运行观察。
go env
go env -w GO111MODULE=off // 修改单个环境变量的值
go build
该命令用于在.go文件的目录下编译生成对应的可执行文件,随后可以直接运行这个程序观察结果。
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
go build .\test.go
.\test.exe
go run
该命令与go build命令不同的地方在于其不会将需要编译的go文件实际地编译出来一个可执行文件放到对应目录下,而是表现为直接运行给定的go文件。也就是说,在不需要可执行文件的前提下,采用go run命令可以快速地构建与测试程序。
这样,上述的两条命令可以用下面一条命令来代替。
go run .\test.go
在学习了这三个命令的使用之后就可以先着手学习Go语言的语法基础,更为高阶的项目工程概念可以先暂时搁置,等基础语法掌握差不多了以后再接触。
一些相对进阶的命令使用简介
一开始只写了前面的内容,但是总感觉一篇文章就这初学之前的前面三个命令介绍太少了,于是还是决定加几个其他的较为常用的命令介绍。
go get
该命令用于从远程获取需要用到的Go语言库,并自动更新当前项目目录的go.mod文件相关依赖信息,可选参数-u来决定是否更新本地库版本。
举个例子,如果我们要从远程获取gorm库的代码到本地,gorm库的网址是gorm.io/gorm
go get -u gorm.io/gorm
初次把库下载到本地加不加-u参数都是一样的,会默认下载最新的版本。如果后续gorm库更新了之后,我们想用go get命令再把本地的库也更新到最新版本就需要加-u参数了,否则go get命令在本地已有gorm库的情况下将不会执行操作。
go install
该命令用于将项目编译打包安装到系统中。如果是对于有main入口的项目,会在$GOPATH/bin下生成项目对应的可执行文件。如果是没有main入口的项目,会在$GOPATH/pkg下生成对应的.a后缀的静态库文件(archive)。这方面的功能类似于go build命令。
当然,对于远程库,在编译之前肯定要先下载下来源代码,这一部分源代码就会被放在$GOPATH/pkg下(高版本Go,低版本好像是会放在$GOPATH/src)。所以实际上go install也可以起到go get的功能(不能自动整理go.mod)。
go mod
在启用了go module管理机制后(GO111MODULE=on或auto时在$GOPATH外),我们的项目需要有go.mod文件来解决模块名、Go版本、依赖库的问题。在空项目可以使用
go mod init <module_name>
来生成初始的go.mod文件。
前面提到go get会自动更新go.mod,但有些时候在做了一些乱七八糟的操作后,go.mod的内容依赖项已经和项目不能完全对上了,这时候可以使用
go mod tidy
命令来根据项目go文件内容来自动更新go.mod文件,引入新依赖的项,将已经不再依赖的项删除等等。
go build
该命令用于在.go文件的目录下编译生成对应的可执行文件,随后可以直接运行这个程序观察结果。
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
go build .\test.go
.\test.exe
go run
该命令与go build命令不同的地方在于其不会将需要编译的go文件实际地编译出来一个可执行文件放到对应目录下,而是表现为直接运行给定的go文件。也就是说,在不需要可执行文件的前提下,采用go run命令可以快速地构建与测试程序。
这样,上述的两条命令可以用下面一条命令来代替。
go run .\test.go
在学习了这三个命令的使用之后就可以先着手学习Go语言的语法基础,更为高阶的项目工程概念可以先暂时搁置,等基础语法掌握差不多了以后再接触。
一些相对进阶的命令使用简介
一开始只写了前面的内容,但是总感觉一篇文章就这初学之前的前面三个命令介绍太少了,于是还是决定加几个其他的较为常用的命令介绍。
go get
该命令用于从远程获取需要用到的Go语言库,并自动更新当前项目目录的go.mod文件相关依赖信息,可选参数-u来决定是否更新本地库版本。
举个例子,如果我们要从远程获取gorm库的代码到本地,gorm库的网址是gorm.io/gorm
go get -u gorm.io/gorm
初次把库下载到本地加不加-u参数都是一样的,会默认下载最新的版本。如果后续gorm库更新了之后,我们想用go get命令再把本地的库也更新到最新版本就需要加-u参数了,否则go get命令在本地已有gorm库的情况下将不会执行操作。
go install
该命令用于将项目编译打包安装到系统中。如果是对于有main入口的项目,会在$GOPATH/bin下生成项目对应的可执行文件。如果是没有main入口的项目,会在$GOPATH/pkg下生成对应的.a后缀的静态库文件(archive)。这方面的功能类似于go build命令。
当然,对于远程库,在编译之前肯定要先下载下来源代码,这一部分源代码就会被放在$GOPATH/pkg下(高版本Go,低版本好像是会放在$GOPATH/src)。所以实际上go install也可以起到go get的功能(不能自动整理go.mod)。
go mod
在启用了go module管理机制后(GO111MODULE=on或auto时在$GOPATH外),我们的项目需要有go.mod文件来解决模块名、Go版本、依赖库的问题。在空项目可以使用
go mod init <module_name>
来生成初始的go.mod文件。
前面提到go get会自动更新go.mod,但有些时候在做了一些乱七八糟的操作后,go.mod的内容依赖项已经和项目不能完全对上了,这时候可以使用
go mod tidy
命令来根据项目go文件内容来自动更新go.mod文件,引入新依赖的项,将已经不再依赖的项删除等等。