我在main
包中有一个结构:
package main
type DispatchesDetailsStruct struct{}
我在包store
中创建了另一个结构,其结构与main
包中创建的结构相同。
package store
type DispatchesDetails struct{}
这是我要做的,我在store
包中创建了一个带有return DispatchesDetails
struct的函数。
func (s *DispatchStore) GetDispatchByCondition(dispatchObject DispatchesRequestStruct, objRaouteAvailability Availability) (dds []DispatchesDetails, err error) {}
现在我从store
包中调用此main
函数,并将返回值分配给main
包结构但显示错误消息
无法将store.DispatchesDetails分配给DispatchesDetailsStruct类型。
我很困惑请帮助我。 感谢
答案 0 :(得分:2)
main.DispatchesDetails
和store.DispatchesDetails
是完全不同的类型。您可能想要选择一个并专门使用它。
例如,而不是:
package main
details := &DispatchesDetails{ ... }
使用:
package main
details := &store.DispatchesDetails{ ... }
答案 1 :(得分:1)
您需要在主包中导入商店包。 Go是严格打字的语言。在这里,您不能将结构分配给另一个结构,即使它们是相似的。虽然你可以embed将你的结构转换成另一个结构。
package main
import(
"store"
)
type DispatchesDetailsStruct struct{
}
func main(){
storedispatchObject := store.DispatchesDetailsStruct{}
storedispatchObject.value = userDetails.value
dispatchesList, err := dps.GetDispatchByCondition(storedispatchObject, objRaouteAvailability)
}
在上面的代码片段之后,DispatchesDetailsStruct将是商店类型,您可以在商店功能中使用它
答案 2 :(得分:1)
Go认为命名类型不同,即使它们具有相同的结构。
如果您需要在不同结构中使用相同类型,我建议这样做 - 将所有类型定义移至第3个包并从那里导入。
因此,您可以立即解决许多问题:
每种类型都定义一次。如果您需要进行一些更改,可以在一个地方进行更改。
所有定义都组合在一起 - 更容易找到。包含类型的包很小。
如果您需要来自其他包的类型,则永远不会遇到循环导入。
所以你可能会来这样的项目结构:
github.com/user/project/schema — types
github.com/user/project/user — some package for users
github.com/user/project/resources — types