go - 错误:此包中重新声明了类型
问题描述
在 req.go 中,我有:
package basic
type Headers struct {
}
type Body struct {
}
在 res.go 中,我也有同样的情况:
package basic
type Headers struct {
}
type Body struct {
}
所以我得到这个错误:
在这个包中重新声明了“标题”
在这个包中重新声明了“身体”
解决这个问题的唯一方法是将 req 和 res 放在他们自己的文件夹中吗?呃,这么多文件夹。
解决方案
包是创建分离和可重用代码的基本单元。从包内部,您可以通过名称引用其标识符(在包中声明的标识符)。从“外部”(来自其他包),您导入包并使用限定标识符引用它的标识符,即
QualifiedIdent = PackageName "." identifier .
当一个包由多个文件组成时,在任何包的文件中声明的每个标识符都将属于包块。引用规范:声明和范围:
表示在顶层(任何函数之外)声明的常量、类型、变量或函数(但不是方法)的标识符的范围是包块。
这意味着您不能在同一个包的 2 个文件中声明相同的标识符。
如果你想一想,这就是它应该的样子。如果外面有人写会basic.Header
怎样?这Header
应该是什么意思?
一种选择是将它们放入 2 个单独的包中:req
and resp
,然后您可以将它们称为req.Header
and resp.Header
,并且您只需查看这些合格的标识符就可以确切地知道它们的含义。
如果您不想要 2 个包,只需重命名它们。给它们起有意义的名字,比如ReqHeader
and RespHeader
,然后你可以像basic.ReqHeader
and一样引用它们basic.RespHeader
。
推荐阅读
- c# - 如何修复 C# 程序中的“cs0029”错误?
- node.js - 带有 node.js 的条带 webhook 的问题
- c - 使用 pthread 的计数器信号量究竟是如何工作的?
- conditional-statements - 使用 APEX_ITEM 在交互式报告中创建下拉列表时如何设置 APEX LOV?
- javascript - 进入视口时播放 SVG - 浏览器支持?
- javascript - Vue多选限制选项计数
- sql - postgres 过程值列表
- javascript - 将值传递给 React map 函数中的函数
- java - 如何使用java字符串方法返回选定数量的字符?
- android - 如何制作类似 Play 商店和 Gmail 的应用栏