首页 > 解决方案 > 错误:此包中重新声明了类型

问题描述

我有这个文件夹结构:

在 req.go 中,我有:

package basic

type Headers struct {
}

type Body struct {
}

在 res.go 中,我也有同样的情况:

package basic

type Headers struct {
}

type Body struct {
}

所以我得到这个错误:

在这个包中重新声明了“标题”

在这个包中重新声明了“身体”

解决这个问题的唯一方法是将 req 和 res 放在他们自己的文件夹中吗?呃,这么多文件夹。

标签: go

解决方案


包是创建分离和可重用代码的基本单元。从包内部,您可以通过名称引用其标识符(在包中声明的标识符)。从“外部”(来自其他包),您导入包并使用限定标识符引用它的标识符,即

QualifiedIdent = PackageName "." identifier .

当一个包由多个文件组成时,在任何包的文件中声明的每个标识符都将属于包块。引用规范:声明和范围:

表示在顶层(任何函数之外)声明的常量、类型、变量或函数(但不是方法)的标识符的范围是包块。

这意味着您不能在同一个包的 2 个文件中声明相同的标识符。

如果你想一想,这就是它应该的样子。如果外面有人写会basic.Header怎样?这Header应该是什么意思?

一种选择是将它们放入 2 个单独的包中:reqand resp,然后您可以将它们称为req.Headerand resp.Header,并且您只需查看这些合格的标识符就可以确切地知道它们的含义。

如果您不想要 2 个包,只需重命名它们。给它们起有意义的名字,比如ReqHeaderand RespHeader,然后你可以像basic.ReqHeaderand一样引用它们basic.RespHeader


推荐阅读