我有两个包:offer.go和parser.go。我有一个struct cart
类型的变量Data
。我想将它作为参数传递给另一个包parser
中的函数。但是我无法做到这一点。请查看以下内容:
offer.go
package offer
import "go_tests/Parser"
type Data struct {
Id int
Quantity int
Mrp float64
Discount float64
}
cart := make(map[int]Data)
//cart has some data in it
//passing it to parser
Parser.BXATP(offer_id, rule.Description, cart, warehouseId)
parser.go
package Parser
type Data struct {
Id int
Quantity int
Mrp float64
Discount float64
}
func BXATP(offer_id int, rule string, cart map[int]Data, warehouseId int){
//my code is here
}
然而,运行此命令会出现以下错误:
cannot use cart (type map[int]Data) as type map[int]Parser.Data in argument to Parser.BXATP
我找到了这个链接,但解决方案似乎并不适用于我的情况:
我将解析器更改为:
func BXATP(offer_id int, rule string, cart map[int]struct {
Id int
Quantity int
Mrp float64
Discount float64
}, warehouseId int)
但现在错误是:
cannot use cart (type map[int]Data) as type map[int]struct { Id int; Quantity int; Mrp float64; Discount float64 } in argument to Parser.BXATP
我不明白如何实现这一目标。任何帮助将不胜感激。
答案 0 :(得分:1)
为什么在两个包中定义了Data
?如果您需要完全相同的结构,只需将其放在一个包装中即可。如果您将其保留在parser
中,则可以执行以下操作:
package offer
import "go_tests/Parser"
cart := make(map[int]Parser.Data)
//cart has some data in it
//passing it to parser
Parser.BXATP(offer_id, rule.Description, cart, warehouseId)
在单独的包中定义的类型即使它们共享名称和底层结构也是不同的。因此Parser.Data
与offer.Data
不兼容。
答案 1 :(得分:1)
您需要将每个结构字段分配给另一个结构字段,请参见示例:
package parser
import "./offer"
type Data struct {
Id int
Quantity int
Mrp float64
Discount float64
}
func main(){
offer_data := &offer.Data{}
parser_data := &Data{
Id: offer_data.Id,
Quantity: offer_data.Quantity,
Mrp: offer_data.Mrp,
Discount: offer_data.Discount,
}
}