【发布时间】:2019-01-19 14:37:27
【问题描述】:
我看到了这段代码并试图理解这一行
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)
}
【问题讨论】:
-
UnmarhalJSON是MarketList的一个方法。见:gobyexample.com/methods -
在golang.org/ref/spec#Method_declarations中也有描述;语言规范非常平易近人,对于 Go 程序员来说几乎是必读的。
-
重复。重复。
-
这在围棋巡回赛中有所介绍:tour.golang.org/methods/1
标签: go