Go json怎么自定义Unmarshal避免判断nil

2023-07-21,,

本篇内容主要讲解“Go json怎么自定义Unmarshal避免判断nil”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Go json怎么自定义Unmarshal避免判断nil”吧!

使用默认的 Unmarshal 方法

package main

import (
    "encoding/json"
    "fmt"
)

type A struct {
    Name string `json:"name"`
    Num  *int   `json:"num"`
}

func main() {
    var a A
    err := json.Unmarshal([]byte(`{"name": "hsowan"}`), &a)
    if err != nil {
        panic(err)
    }
    fmt.Println(a.Name)
    // 每次使用都要判断一下是否 nil 防止 panic
    if a.Num != nil {
        fmt.Println(*a.Num)
    }
}

自定义的 Unmarshal 方法

当字段为 nil 时,在 Unmarshal 时进行初始化,这样就可以避免使用的时候发生 panic, 同时也不需要在使用的时候判断是否为 nil 了。

package main

import (
    "encoding/json"
    "fmt"
)

type A struct {
    Name string `json:"name"`
    Num  *int   `json:"num"`
}

func (a *A) UnmarshalJSON(b []byte) error {
    type alias A
    aux := (*alias)(a)
    if err := json.Unmarshal(b, &aux); err != nil {
        return err
    }
    if aux.Num == nil {
        aux.Num = new(int)
    }
    return nil
}

func main() {
    var a A
    err := json.Unmarshal([]byte(`{"name": "hsowan"}`), &a)
    if err != nil {
        panic(err)
    }
    fmt.Println(a.Name)
    fmt.Println(*a.Num)
}

到此,相信大家对“Go json怎么自定义Unmarshal避免判断nil”有了更深的了解,不妨来实际操作一番吧!这里是本站网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!