douyuan3842 2018-08-12 20:30
浏览 11
已采纳

具有返回值的go函数

I saw this piece of code and trying to understand this line

func (ml *MarketList) UnmarshalJSON(b []byte) error 

In the above line, I believe the function name is UnmarshallJSON that takes a byte array as input and return error as output. What does

func (ml *MarketList)

I know * as a dereferenced operator but don't understand what is the context here. If someone can explain that would be great.

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
", ml)
}
  • 写回答

1条回答 默认 最新

  • duanlu1922 2018-08-13 07:09
    关注

    This is the way how you define a pointer Type. For example:

    var a string 
    var b *string // pointer to a string
    b = &a
    

    In your case *MarketList is the type pointer to a MarketList.

    At all I would recommend you to make the tour of Go these things are explained there.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测