2017-02-17 22 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 

В models/modelA/modelA.go:

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

Что именно в сообщении об ошибке не ясно? Обратите внимание, что вы ** не ** псевдоним '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

Вот как работает проект проекта Голанг. Если вы не хотите импортировать все пакеты по одному, вы можете поместить всю свою модель внутри всего одного пакета, разбитого на несколько файлов – Tinwor

+0

ok. Благодарю. Я попробую это. – tjfdfs