go module的工作区问题
1、问题描述
这里启用的是go module模式,在将一个目录进行初始化后,该目录下生成一个go.mod文件。当我试图在该目录下自定义包时(即创建一个子文件夹并新建.go文件),vscode给了以下错误提示:
gopls requires a module at the root of your workspace.
You can work with multiple modules by opening each one as a workspace folder.
Improvements to this workflow will be coming soon, and you can learn more here:
https://github.com/golang/tools/blob/master/gopls/doc/workspace.md.go list
2、问题分析
进入提示中的地址:https://github.com/golang/tools/blob/master/gopls/doc/workspace.md
了解到,go module模式分为两种情况:
1.一个模块
一个模块就是指,该文件及其子目录下,只有一个go.mod文件(这里需要注意的是,如果将包新建或移动到该目录下,新的子目录下虽然没有go.mod文件,但go依然视之为一个module,此时就构成了嵌套)。
2.多个模块
自 2021 年 1 月起,如果使用多个模块或嵌套模块,则需要为每个模块创建一个“工作区文件夹”。这意味着每个模块都有自己的范围,并且功能不会跨模块工作。
3.开启多模块
多模块并非默认开启的,因为目前依旧不够完善,需要手动开启。可以通过配置 experimentalWorkspaceModule 设置进行尝试
3、问题解决
编辑:将下面设置添加到文件中
"experimentalWorkspaceModule ":true,
4、总结
由于版本的不断更新,随着更加的规范化,很多旧版本不视为问题的问题都暴露了出来,这固然是一种进步,但学习的过程中也不免有了更多的挑战。
参考:https://www.cnblogs.com/dliy/p/14832722.html
https://github.com/golang/tools/blob/master/gopls/doc/workspace.md