“导出的类型应具有注解或未导出”golang VS代码

62o28rlo  于 2023-06-19  发布在  Go
关注(0)|答案(3)|浏览(113)

我在Go中尝试了以下代码:

type Agent struct {
    name string    // Not exported
    categoryId int // Not exported
}

VS Code报告以下 * 问题 *:
导出类型代理应具有注解或未导出
警告有点烦人。所以我有以下几个问题:

  • 如何摆脱它?
  • 我应该写什么评论?
  • 是否有任何 * 默认 * 评论模板?

它要求我放一个评论,但它不提供我添加一个默认情况下。

egdjgwm8

egdjgwm81#

只需要在它上面添加一个注解,以你的类型(或函数,方法等)的名称开始,像这样:

// Agent is ...
type Agent struct {
   name string
   categoryId int
}

这个linter错误是由于Agent类型被导出导致的,即使它的属性没有被导出。要不导出类型,请使用小写形式定义它,如下所示:

type agent struct {
   name string
   categoryId int
}

你的linter抱怨这一点的原因是godoc使用那些注解来自动为你的项目生成文档。你可以在pkg.go.dev找到很多这样的Go项目的例子。
例如,如果你将一个Go项目上传到GitHub,pkg.go.dev将使用这些注解自动为你生成一个文档。您甚至可以添加可运行的代码示例和许多其他内容,如go-doc tricks所示。

lfapxunr

lfapxunr2#

此警告是由官方linter for Go源代码-golint产生的。Golint 被Visual Studio Code editor中的Go extension用作 default linter。
为什么
要理解 * 原因 * 为什么 golint 显示警告,我们可以参考与comments相关的官方Go文档-"Go Doc Comments"(引用):
程序中的每个导出(* 大写 *)名称都应该有一个文档注解。
但是如果你倾向于写自我文档化的代码(即,从 * 名称 * 本身等可以清楚地看出意图)。

解决方案

除了已经提出的solutions之外,你可以开始使用替代的更高级的golangci-lint,它是一个Go linters * 聚合器 *。默认情况下,它禁用了 golint,因此不会触发这个关于丢失 *doc注解 * 的恼人警告。当然,如果需要,可以使用相关的flags(参见--exclude strings--exclude-use-default)打开此警告。
在Go扩展的描述页面上也提到了更改linter的可能性:

如何在VS Code中更改Go扩展的lint工具

要在VS Code中更改lint工具,请执行以下步骤。

**1)**在Go扩展管理菜单中选择【配置扩展设置】:

**2)**从相关下拉列表中选择“golangci-lint”:

**3)**为了防止VS Code由于使用这个强大的linter而冻结,请添加--fast标志,如“编辑器集成”说明中所述。

为此,您需要导航到Go Extension配置页面(如步骤1所示),打开settings.json文件并添加相关配置,如以下屏幕截图所示:

**NB!**以下是“golangci-lint”常见问题解答的一段引文:
为什么第一次跑步时跑得很快?

因为第一次运行会缓存类型信息。所有后续运行都将很快。通常,此选项在本地计算机上的开发期间使用,并且已经执行了编译。

lnlaulya

lnlaulya3#

您可以通过在函数名上方添加注解来解决此问题。
示例如下:

//ArrayBasic1 is the function for calculating array
func ArrayBasic1() {
  x := [5]int{1: 10, 2: 20, 3: 30}
  fmt.Println("value from arraybasic1", x)
}

相关问题