我看到了这段代码并试图理解这一行
func (ml *MarketList) UnmarshalJSON(b []byte) error
在上面的行中,我相信函数名称是UnmarshallJSON,它将字节数组作为输入,将错误返回作为输出。
func (ml *MarketList)
我知道*作为取消引用的运算符,但不了解这里的上下文。如果有人可以解释那将是很好的。
package main
import (
"encoding/json"
"fmt"
)
var jsonBytes = []byte(`
{"MS": {
"last":"25",
"highestBid":"20"},
"GE": {
"last": "24",
"highestBid": "22"}
}`)
type Market struct {
MarketName string
Last string
HighestBid string
}
type MarketList []Market
func (ml *MarketList) UnmarshalJSON(b []byte) error {
tmp := map[string]Market{}
err := json.Unmarshal(b, &tmp)
if err != nil {
return err
}
var l MarketList
for k, v := range tmp {
v.MarketName = k
l = append(l, v)
}
*ml = l
return nil
}
func main() {
ml := MarketList{}
// Unmarshal directly into a []Market alias
_ = json.Unmarshal(jsonBytes, &ml)
fmt.Printf("%+v\n", ml)
}
答案 0 :(得分:0)
这是定义指针类型的方式。例如:
var a string
var b *string // pointer to a string
b = &a
在您的情况下,*MarketList
是指向MarketList的类型指针。
我完全建议您使tour of Go的内容在此处说明。