第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Go 中,定義明確的類型的 JSON 封送處理會(huì)失敗嗎?

在 Go 中,定義明確的類型的 JSON 封送處理會(huì)失敗嗎?

Go
動(dòng)漫人物 2022-03-03 14:55:25
給定以下代碼:package mainimport (    "encoding/json"    "fmt"    "log")type Employee struct {    Id int "json:id"}func main() {    b, err := json.Marshal(&Employee{Id: 2})    if err != nil {        log.Fatal("Couldn't marshal the Employee")    }    fmt.Println(string(b))}由于結(jié)構(gòu)定義明確,因此可以使用_占位符可靠地忽略檢查錯(cuò)誤。Employee理論上它應(yīng)該永遠(yuǎn)不會(huì)失敗,所以問題是忽略這種類型的錯(cuò)誤并在這種類型的樣板錯(cuò)誤檢查上節(jié)省一點(diǎn)是一個(gè)好習(xí)慣嗎?忽略看起來像這樣:package mainimport (    "encoding/json"    "fmt")type Employee struct {    Id int "json:id"}func main() {    b, _ := json.Marshal(&Employee{Id: 2})    fmt.Println(string(b))}
查看完整描述

2 回答

?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個(gè)贊

錯(cuò)誤處理和 Go:


正確的錯(cuò)誤處理是好的軟件的基本要求。


通常你的代碼不會(huì)失敗。但如果用戶將此MarshalJSON方法接收器添加到您的類型,則會(huì)失敗:


func (t *Employee) MarshalJSON() ([]byte, error) {

    if t.Id == 2 {

        return nil, fmt.Errorf("Forbiden Id = %d", t.Id)

    }

    data := []byte(fmt.Sprintf(`{"Id":%d}`, t.Id))

    return data, nil

}

此代碼編譯,但僅出于Id == 2(The Go Playground)的目的而失?。?/p>


package main


import (

    "encoding/json"

    "fmt"

    "log"

)


type Employee struct {

    Id int "json:id"

}


func main() {

    b, err := json.Marshal(&Employee{Id: 2})

    if err != nil {

        log.Fatal("Couldn't marshal the Employee", err)

    }


    fmt.Println(string(b))

}


func (t *Employee) MarshalJSON() ([]byte, error) {

    if t.Id == 2 {

        return nil, fmt.Errorf("Forbiden Id = %d", t.Id)

    }

    data := []byte(fmt.Sprintf(`{"Id":%d}`, t.Id))

    return data, nil

}

此代碼也編譯,但失?。═he Go Playground):


package main


import (

    "encoding/json"

    "fmt"

    "log"

)


type Employee struct {

    Id int "json:id"

}


func main() {

    b, err := json.Marshal(&Employee{Id: 2})

    if err != nil {

        log.Fatal("Couldn't marshal the Employee")

    }


    fmt.Println(string(b))

}


func (t Employee) MarshalJSON() ([]byte, error) {

    data := []byte(fmt.Sprint(t))

    return data, nil

}


查看完整回答
反對 回復(fù) 2022-03-03
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊

您始終可以編寫自己的“包裝器”包來組合可能是樣板的行為。例如,如果您設(shè)置了日志系統(tǒng),您可能會(huì)構(gòu)建一個(gè)小包,如下所示:


package json

import (

  "encoding/json"

  "log"

)

func TryMarshal(v interface{}) []byte {

  b, err := json.Marshal(v)

  if err != nil {

    log.Println(err)

    return nil

  }

  return b

}


查看完整回答
反對 回復(fù) 2022-03-03
  • 2 回答
  • 0 關(guān)注
  • 170 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號