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