go:暴露的别名结构可以';t指定给内部结构文字
我以以下方式排列我的模型:go:暴露的别名结构可以';t指定给内部结构文字,go,struct,model,Go,Struct,Model,我以以下方式排列我的模型: projectDir 梅因,加油 模型 走吧 莫德拉 莫代拉·戈 模型B 模式B.go 在main.go中: 包干管 import ( "test.local/projectDir/models" ) func main() { modelA := models.ModelA{ FieldA: "xx", FieldB: models.ModelB{ FiledC: "yy"
- projectDir
- 梅因,加油
- 模型
- 走吧
- 莫德拉
- 莫代拉·戈
- 模型B
- 模式B.go
main.go中
:
包干管
import (
"test.local/projectDir/models"
)
func main() {
modelA := models.ModelA{
FieldA: "xx",
FieldB: models.ModelB{
FiledC: "yy"
} // here will raise a error: cannot use models.ModelB literal (type models.ModelB) as type modelB.ModelB in field value
}
}
在models/models.go中
:
package models
import (
"test.local/projectDir/models/modelA"
"test.local/projectDir/models/modelB"
)
type ModelA modelA.ModelA
type ModelB modelB.ModelB
package modelA
import (
"test.local/projectDir/models/modelB"
)
type ModelA struct {
fieldA string
fieldB modelB.ModelB
}
package modelB
type ModelB struct {
fieldC string
}
在模型/modelA/modelA.go
中:
package models
import (
"test.local/projectDir/models/modelA"
"test.local/projectDir/models/modelB"
)
type ModelA modelA.ModelA
type ModelB modelB.ModelB
package modelA
import (
"test.local/projectDir/models/modelB"
)
type ModelA struct {
fieldA string
fieldB modelB.ModelB
}
package modelB
type ModelB struct {
fieldC string
}
在models/modelB/modelB.go中
:
package models
import (
"test.local/projectDir/models/modelA"
"test.local/projectDir/models/modelB"
)
type ModelA modelA.ModelA
type ModelB modelB.ModelB
package modelA
import (
"test.local/projectDir/models/modelB"
)
type ModelA struct {
fieldA string
fieldB modelB.ModelB
}
package modelB
type ModelB struct {
fieldC string
}
正如错误所指出的,结构类型是不同的。有没有更好的方法来组织模型?错误是不言自明的:您试图将错误的值(
models.ModelB
)分配给ModelB.ModelB
结构。您可以通过导入正确的软件包轻松解决此问题:
import (
"test.local/projectDir/models/modelB"
)
func main() {
modelA := models.ModelA{
FieldA: "xx",
FieldB: modelB{
FiledC: "yy",
},
}
}
错误消息中到底有什么不清楚?请注意,您不需要别名
modelB.modelB
来键入models.modelB
。您可以定义一个新的命名类型。像这样的命名类型可以相互转换,但(因为它们是不同的类型)不能直接赋值。这将解决错误,但现在我必须逐个导入所有模型。这就是Golang项目结构的工作方式。如果你不想一个接一个地导入所有的包,你可以把所有的模型放在一个包里面,这个包被分割成多个文件