go - 无法将结构类型参数传递给另一个包中的函数

标签 go struct

我有两个包:offer.go 和 parser.go。我有一个类型为 struct Data 的变量 cart。我想将它作为参数传递给另一个包 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)

解析器.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

我找到了这个链接,但解决方案似乎不适用于我的情况:

Why passing struct to function with literal struct parameter from current package differs from the same for function from another package?

我将解析器更改为:

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

我不明白如何实现这一点。任何帮助将不胜感激。

最佳答案

为什么要在两个包中定义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.Dataoffer.Data 不兼容。

关于go - 无法将结构类型参数传递给另一个包中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40082647/

相关文章:

go - 为什么 http.ServeMux 没有 Remove 方法?

c++ - 将对象初始化为全零

swift - 通过索引访问结构成员

go - 如何在go中检查文件是否可执行?

mongodb - 使用mongodb go驱动程序将用户添加到mongodb

go - 复合类型和指针方法

python - 如何使用 Python 解析 JPEG 文件中的复杂结构?

json - Golang json 解码

C 列表 - 访问结构体的成员并打印它

list - 存储在列表后如何在 Struct 实例上调用 func