我幾個小時都面臨著一個無法支持的問題,我必須從以太坊智能合約調用中解碼數據(但這不是主題,因為這部分工作),但我將這些數據恢復到.interface{}當我想把這個空接口轉換為我可以使用的結構時,我收到了以下消息:panic: interface conversion: interface {} is struct { SrcToken common.Address "json:\"srcToken\""; DstToken common.Address "json:\"dstToken\""; SrcReceiver common.Address "json:\"srcReceiver\""; DstReceiver common.Address "json:\"dstReceiver\""; Amount *big.Int "json:\"amount\""; MinReturnAmount *big.Int "json:\"minReturnAmount\""; Flags *big.Int "json:\"flags\""; Permit []uint8 "json:\"permit\"" }, not oneinch.OneInchSwapDataDesc結構是:type OneInchSwapDataDesc struct { SrcToken common.Address DstToken common.Address SrcReceiver common.Address DstReceiver common.Address Amount *big.Int MinReturnAmount *big.Int Flags *big.Int Permit []uint8}當我查找類型和我得到的數據值時:fmt.Println("Type: ", reflect.TypeOf(data))fmt.Printf("Data: %+v\n", data)// Logs:// Type: struct { SrcToken common.Address "json:\"srcToken\""; DstToken common.Address "json:\"dstToken\""; SrcReceiver common.Address "json:\"srcReceiver\""; DstReceiver common.Address "json:\"dstReceiver\""; Amount *big.Int "json:\"amount\""; MinReturnAmount *big.Int "json:\"minReturnAmount\""; Flags *big.Int "json:\"flags\""; Permit []uint8 "json:\"permit\"" }// Data: {SrcToken:0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 DstToken:0xc2132D05D31c914a87C6611C10748AEb04B58e8F SrcReceiver:0x11431a89893025D2a48dCA4EddC396f8C8117187 DstReceiver:0x2C2d6E5E16FE924cE31784cdAd27C01D1BC62873 Amount:+10000000 MinReturnAmount:+9949450 Flags:+4 Permit:[]}我認為這個問題來自那些來自TypeOf的“json”,但我沒有找到任何技巧來清除它(事實上,我真的不確定問題是否真的來自那個)。如果有人有想法,你會拯救我的大腦免于在地獄中燃燒。謝謝。
1 回答
慕斯王
TA貢獻1864條經驗 獲得超2個贊
接口的值類型為 。它是一種未命名的類型。僅當類型相同,或者斷言的類型是接口并且基礎接口類型實現該接口時,類型斷言才有效。您嘗試轉換為的類型不是接口,而是結構。所以你可以這樣做:struct { SrcToken ...}
value:=data.(struct {
SrcToken common.Address `json:"srcToken"`
DstToken common.Address `json:"dstToken"`
SrcReceiver common.Address `json:"srcReceiver"`
DstReceiver common.Address `json:"dstReceiver"`
Amount *big.Int `json:"amount"`
MinReturnAmount *big.Int `json:"minReturnAmount"`
Flags *big.Int `json:"flags"`
Permit []uint8 `json:"permit"` })
一旦你有了這個,你可以使用轉換為你想要的類型:value
targetValue:=oneinch.OneInchSwapDataDesc(value)
- 1 回答
- 0 關注
- 143 瀏覽
添加回答
舉報
0/150
提交
取消
