2017-02-17 86 views
-1

我安排我的模型是這樣的:走:暴露別名結構不能分配給內部結構字面

  • PROJECTDIR

    • main.go

    • 車型

      • models.go
      • MODELA
        • modelA.go
      • modelB
        • modelB.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 
} 

models/modelB/modelB.go

package modelB 

type ModelB struct { 
    fieldC string 
} 

由於錯誤指出,結構類型是不同的。有沒有更好的方法來組織模型?

+0

錯誤消息究竟是什麼不清楚的嗎?請注意,您可以使用** not **別名'modelB.ModelB'來鍵入'models.ModelB'。你定義一個**新的**命名類型。像這樣的命名類型可以相互轉換,但是(因爲它們是不同的類型)不能直接分配。 – Volker

回答

1

錯誤是不言自明的:您正試圖將錯誤的值(models.ModelB)分配給ModelB.modelB結構。
您可以輕鬆地通過導入正確的包解決此問題:

import (
    "test.local/projectDir/models/modelB" 
) 

func main() { 
    modelA := models.ModelA{ 
     FieldA: "xx", 
     FieldB: modelB{ 
      FiledC: "yy", 
     }, 
    } 
} 
+0

這將解決錯誤,但現在我必須逐個導入所有「模型」。 – tjfdfs

+0

這就是Golang項目結構的工作原理。如果你不想一個一個地導入所有的軟件包,你可以把你所有的模型放入一個軟件包中,並將其分割成多個文件。 – Tinwor

+0

ok。謝謝。我會嘗試這種方式。 – tjfdfs