私は2つのパッケージ:offer.goとparser.goを持っています。構造体Data
の変数cart
があります。私は別のパッケージparser
にある関数への引数として渡したいと思います。しかし私はそれをすることができません。以下に見てください。ただし、これを実行しているstruct型引数を別のパッケージの関数に渡すことができません
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)
offer.go
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
私はこれを達成する方法を理解していません。どんな助けもありがとう。
私はタイプを使用していますが、 'Data'コードはに関連していないにも非常に多くの他の場所でのパッケージ提供でパーサ。 Parser Packageのオファーパッケージから 'Data'を使用する方法はありますか? – Jagrati
循環インポートエラーが発生することはありません。 'offer 'はすでに' Parser'をインポートしているので 'Parser'に' offer'をインポートすることはできません。 1つの解決策は、型を第3のパッケージに移動し、それを 'offer 'と' Parser'の両方にインポートすることです。 – abhink
また、 'offer'に' Data'を使用することもできます。 'offer'のどこにでも' Parser.Data'を使い、 'offer'から' Data'を削除するだけです。それらはまだ同じ構造ですので、型に定義されたメソッドがない限り、それは重要ではありません。 – abhink