错误:此包装中已重新声明类型

时间:2018-11-17 20:46:20

标签: go

I have this folder structure:

在req.go中,我有:

package basic

type Headers struct {
}

type Body struct {
}

在res.go中,我有相同的内容:

import sys
from PyQt5.QtCore    import *
from PyQt5.QtWidgets import *

class Window(QMainWindow):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.lcd = QLCDNumber() 
        self.lcd.setFixedSize(150, 70)               # Set the size you want
        self.lcd.display(12345)      

        centralWidget = QWidget()                         
        self.setCentralWidget(centralWidget)

        self.mainLayout = QGridLayout(centralWidget)
        self.mainLayout.addWidget(self.lcd, 0, 0, Qt.AlignRight)  # Set the alignment option
        self.mainLayout.addWidget(QTextEdit("TextEdit..."), 1,0)
        self.mainLayout.addWidget(QPushButton("Button"), 2,0, Qt.AlignCenter)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex  = Window()
    ex.show()
    sys.exit(app.exec_())   

所以我得到这个错误:

  

此包中重新声明了“标头”

     

在此包裹中重新声明了“身体”

解决此问题的唯一方法是将req和res放在自己的文件夹中吗?如此之多的文件夹。

1 个答案:

答案 0 :(得分:1)

包是创建分离的可重用代码的基本单位。从包内部,通过其名称引用其identifiers(在包中声明的标识符)。从“外部”(从其他程序包)导入程序包,并使用qualified identifier引用它的标识符,

QualifiedIdent = PackageName "." identifier .

当一个包包含多个文件时,在任何包文件中声明的每个标识符都将属于该包块。引用自Spec: Declarations and scope:

  

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

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

如果考虑一下,应该是这样。如果外面有人写basic.Header,会发生什么?那应该是哪个Header

一种选择是将它们放入2个单独的包中:reqresp,然后可以将它们称为req.Headerresp.Header,您确切知道什么它们只是通过查看这些合格的标识符。

如果您不想要2个软件包,只需对其重命名。给他们起有意义的名字,例如ReqHeaderRespHeader,然后您可以像basic.ReqHeaderbasic.RespHeader这样称呼他们。