1. GOROOT和GOPATH
GOROOT
和 GOPATH
都是 Go 语言中的环境变量,用于指定 Go 工具链和工作区的路径。
GOROOT
指定了 Go 工具链的安装路径,它包含了 Go 语言的标准库、编译器等工具。在使用 Go 编译器、运行时等工具时,它们会默认从 GOROOT
中查找相关的文件。一般情况下,我们不需要修改 GOROOT
的值,除非你需要使用不同版本的 Go 工具链。
GOPATH
指定了 Go 语言工作区的路径,它包含了你的项目源代码、依赖库以及编译后的可执行文件等。在使用 Go 工具链时,它们会默认从 GOPATH
中查找相关的文件。如果你的项目依赖了第三方库,那么这些库也会被下载到 GOPATH
目录下。在使用 Go Modules 进行依赖管理时,GOPATH
的作用会被降低,因为 Go Modules 可以将依赖库放在任何地方,不需要将其放在 GOPATH
目录下。
总之,GOROOT
和 GOPATH
都是 Go 语言中非常重要的环境变量,它们对于正确配置 Go 工具链和工作区非常重要。
2. GOPATH
GOPATH
是一个环境变量,用于指定 Go 语言工作区的路径。在 GOPATH
中包含了三个重要的目录:src
、bin
和 pkg
。其中,src
目录是用于存放 Go 语言源代码的目录,bin
目录是用于存放编译后的可执行文件的目录,pkg
目录是用于存放编译后的库文件的目录。
GOPATH
的作用是告诉 Go 工具链在哪里查找你的项目源代码和依赖库。如果你的项目不在 GOPATH
目录下,那么你需要将你的项目复制到 GOPATH/src
目录下,或者设置 GO111MODULE=on
,使用 Go Modules 进行依赖管理。如果你使用 Go Modules 进行依赖管理,那么你可以将你的项目放在任何地方,不需要将其复制到 GOPATH/src
目录下。
3. vscode安装go插件后,编写代码弹出来的安装模块选择全部安装即可
- 全部安装成功
- 安装成功后会在我们的GOPATH路径下下载到相关的可执行文件和库文件
4. vscode中显示package引用包“报错”
gopls requires a module at the root of your workspace.
You can work with multiple modules by upgrading to Go 1.18 or later, and using
go workspaces (go.work files).
See the documentation for more information on setting up your workspace:
https://github.com/golang/tools/blob/master/gopls/doc/workspace.md.
- 这个“报错”并不是“‘报错”,不会影响程序的正常运行
主要是因为我的GOPATH和工作目录不再同一目录下,有很多网友说的可以打开文件
—>首选项
—>设置
—>扩展
—>go
—>Alternate Tools
—>编辑settings.json
,这里添加
"gopls": {"experimentalWorkspaceModule": true
},
- 我这里是行不通的,照样报错
不行,不行,不行
5. 使用 Go Modules 管理
-
最大的好处就是我的项目可以放在任意位置
vscode打开控制台在项目下执行go mod init <项目路径>
,例如我的项目路径是D:/goproject: -
执行
go mod init goproject
-
可以看到在我的项目底下生成了一个
go.mod
文件,里面放的是我的项目名称和go版本,其实这个文件还有更多作用,感兴趣的可以去多多了解,也可以达到评论区一块学习交流 -
这个文件也可以自己手动添加不用命令
module goprojectgo 1.17
6. go.mod文件
是的,使用 go mod init goproject
命令会在当前目录下生成一个名为 go.mod
的文件。这个文件是 Go Modules 的描述文件,它包含了你的项目名称、版本号以及依赖库等信息。
在你的项目中使用 Go Modules 进行依赖管理时,你可以在 go.mod
文件中声明你的项目所依赖的第三方库,然后使用 go build
、go test
等命令自动下载并管理这些依赖库。这样可以方便地管理你的项目依赖,并且可以避免由于依赖库版本不一致而导致的编译错误等问题。
除了 go.mod
文件之外,使用 go mod init
命令还会生成一个名为 go.sum
的文件。这个文件用于记录你的项目所依赖的第三方库的具体版本和哈希值等信息,以确保每个人在构建你的项目时都使用相同的依赖库版本。