婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Golang JSON的進(jìn)階用法實(shí)例講解

Golang JSON的進(jìn)階用法實(shí)例講解

熱門標(biāo)簽:濱州自動(dòng)電銷機(jī)器人排名 浙江高頻外呼系統(tǒng)多少錢一個(gè)月 惠州電銷防封電話卡 黃岡人工智能電銷機(jī)器人哪個(gè)好 汕頭小型外呼系統(tǒng) 釘釘有地圖標(biāo)注功能嗎 鄭州亮點(diǎn)科技用的什么外呼系統(tǒng) 建造者2地圖標(biāo)注 阿里云ai電話機(jī)器人

痛點(diǎn)

json 是當(dāng)前最常用的數(shù)據(jù)傳輸格式之一,純文本,容易使用,方便閱讀,在通信過(guò)程中大量被使用。 

你是否遇到過(guò)json中某個(gè)字段填入某種類型都適合而陷入兩難境地? (例如:定義了一個(gè)port字段,你卻不知道是填入 8080 ,還是 “8080” 的尷尬局面)

你是否遇到過(guò)json反解析報(bào)錯(cuò)是因?yàn)樘钊胱侄蔚念愋筒黄ヅ鋵?dǎo)致的?例如:

json: cannot unmarshal number into Go struct field Host.port of type string

你是否有json某字段兼容2種或者多種的數(shù)據(jù)結(jié)構(gòu)的需求?

你是否想讓程序更優(yōu)雅,更具有適配性,而不在被這些小細(xì)節(jié)頭痛?

如果你有或者你想,獲取你可以看看這篇文章。

重現(xiàn)問(wèn)題

我們給了用戶一個(gè)json如下:

{
 "name":"yulibaozi",
 "port":8080
}

但是,業(yè)務(wù)方卻誤填了”8080”,結(jié)果我們程序反解析報(bào)錯(cuò),導(dǎo)致業(yè)務(wù)失敗。

json: cannot unmarshal number into Go struct field Host.port of type string

或許你認(rèn)為這是業(yè)務(wù)方的問(wèn)題,但我認(rèn)為我們可以更優(yōu)雅的解決這個(gè)問(wèn)題。

如何解決問(wèn)題

我們先定義了一個(gè)結(jié)構(gòu)體

type Host struct {
 Name string `json:"name"`
 Port Port `json:"port"`
}

心細(xì)的你會(huì)發(fā)現(xiàn),Port既不是int也不是string類型,而是Port類型,而Port類型是:

type Type int

const (
 Int Type = iota
 String
)

type Port struct {
 Type Type
 IntVal int
 StrVal string
}

在Port結(jié)構(gòu)體中,我們發(fā)現(xiàn)了Type類型, 而Type類型包括了int,string兩種類型。接下來(lái)就非常重要了,我們需要實(shí)現(xiàn)以下這兩個(gè)接口。

json.Unmarshaller interface
json.Marshaller interface

實(shí)現(xiàn)代碼如下:

type Port struct {
 Type Type
 IntVal int
 StrVal string
}

// 實(shí)現(xiàn) json.Unmarshaller 接口
func (port *Port) UnmarshalJSON(value []byte) error {
 if value[0] == '"' {
  port.Type = String
  return json.Unmarshal(value, port.StrVal)
 }
 port.Type = Int
 return json.Unmarshal(value, port.IntVal)
}

// 實(shí)現(xiàn) json.Marshaller 接口
func (port Port) MarshalJSON() ([]byte, error) {
 switch port.Type {
 case Int:
  return json.Marshal(port.IntVal)
 case String:
  return json.Marshal(port.StrVal)
 default:
  return []byte{}, fmt.Errorf("impossible Port.Type")
 }
}

接下來(lái)測(cè)試:

測(cè)試反解析

測(cè)試反解析int

給出json數(shù)據(jù):

{"name":"yulibaozi","port":8090}

反解析得到的結(jié)構(gòu)體數(shù)據(jù)如下:

{Name:yulibaozi Port:{Type:0 IntVal:8090 StrVal:}}

測(cè)試反解析string:

給出json數(shù)據(jù):

{"name":"yulibaozi","port":"8090"}

反解析得到的結(jié)構(gòu)體數(shù)據(jù)如下:

{Name:yulibaozi Port:{Type:1 IntVal:0 StrVal:8090}}

測(cè)試編碼的json

測(cè)試編碼int的結(jié)構(gòu)體如下:

host := Host{
   Name: "yulibaozi",
   Port: Port{
     Type:  Int,
     IntVal: 8080,
   },
 }

編碼后的json如下:

{"name":"yulibaozi","port":8080}

測(cè)試編碼string的結(jié)構(gòu)體如下:

host := Host{
   Name: "yulibaozi",
   Port: Port{
     Type:  String,
     StrVal: "8080",
   },
 }

編碼后的json數(shù)據(jù)如下:

{"name":"yulibaozi","port":"8080"}

在反編碼測(cè)試中,你會(huì)發(fā)現(xiàn)當(dāng)json填入的類型不同時(shí),會(huì)編碼到結(jié)構(gòu)體中對(duì)應(yīng)的字段中。

在編碼測(cè)試中, 具體編碼那個(gè)數(shù)據(jù)是由Type來(lái)確定的。

總結(jié)

其實(shí),這篇文章只是分享了下json中使用的小技巧,他打破了在使用json時(shí),需要呆板的數(shù)據(jù)結(jié)構(gòu)的印象,轉(zhuǎn)而走向了多變,靈活跳脫的風(fēng)格,其實(shí),這這個(gè)小tips的核心在于實(shí)現(xiàn)Unmarshaller,Marshaller這兩個(gè)結(jié)構(gòu)體,他們的實(shí)現(xiàn)是這個(gè)分享的關(guān)鍵,當(dāng)然,你可以實(shí)現(xiàn)如開篇所說(shuō)的那樣,json某字段兼容2種及以上結(jié)構(gòu),當(dāng)然,你也可以對(duì)yaml,toml等進(jìn)行折騰,都會(huì)得到你想要的答案。

好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • golang使用json格式實(shí)現(xiàn)增刪查改的實(shí)現(xiàn)示例
  • golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法
  • golang結(jié)構(gòu)體與json格式串實(shí)例代碼
  • golang如何修改json文件內(nèi)容的方法示例
  • golang如何自定義json序列化應(yīng)用詳解
  • golang json性能分析詳解
  • golang中json反序列化可能遇到的問(wèn)題
  • Golang map如何生成有序的json數(shù)據(jù)詳解
  • 利用Golang解析json數(shù)據(jù)的方法示例
  • Golang中使用JSON的一些小技巧分享
  • golang實(shí)現(xiàn)sql結(jié)果集以json格式輸出的方法
  • Golang 如何解析和生成json

標(biāo)簽:昭通 東營(yíng) 泰安 駐馬店 瀘州 阿壩 晉中 滄州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang JSON的進(jìn)階用法實(shí)例講解》,本文關(guān)鍵詞  Golang,JSON,的,進(jìn)階,用法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang JSON的進(jìn)階用法實(shí)例講解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Golang JSON的進(jìn)階用法實(shí)例講解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲国产成人va在线观看天堂| 中文成人综合网| 欧美亚洲图片小说| 亚洲在线观看免费| 欧美色窝79yyyycom| 亚洲一区二区欧美日韩| 欧美日韩中文精品| 日韩av在线发布| 久久看人人爽人人| 亚洲1区2区3区视频| 欧美日韩你懂得| 国产原创一区二区三区| 1024成人网| 欧日韩精品视频| 久久9热精品视频| 亚洲精品视频一区| 亚洲va国产天堂va久久en| 91精品国产欧美一区二区18| 日韩成人午夜电影| 日韩视频免费观看高清在线视频| 欧美老年两性高潮| 国产尤物一区二区在线| 日韩国产精品久久| 欧美色图激情小说| 成人综合激情网| 国产精品99久久久| 国产精品色在线| 欧美sm极限捆绑bd| 欧美日韩国产精品自在自线| 成人毛片视频在线观看| 国产精品1024| 国产99精品在线观看| 日本少妇一区二区| 精品亚洲国产成人av制服丝袜 | 日韩黄色小视频| 欧美国产一区二区| 综合久久一区二区三区| 亚洲影院理伦片| 国产盗摄精品一区二区三区在线| 欧美日本一道本| 中文字幕免费观看一区| 亚洲人快播电影网| 中文字幕 久热精品 视频在线| 久久久久久久久久久久久女国产乱| 欧美男生操女生| 久久99国产精品久久99果冻传媒| 久久亚洲免费视频| 91视频观看免费| 在线观看视频欧美| 中文字幕一区二区三区蜜月 | 亚洲免费视频中文字幕| 久久久青草青青国产亚洲免观| 欧美亚洲图片小说| 91麻豆精品91久久久久久清纯| 日韩欧美色电影| 亚洲人成精品久久久久| 亚洲va国产天堂va久久en| 麻豆精品一区二区综合av| 麻豆91免费看| 欧美视频中文字幕| 日韩免费视频一区| 中文一区二区完整视频在线观看| 亚洲成av人影院在线观看网| 另类调教123区| 91极品视觉盛宴| 国产精品乱码一区二三区小蝌蚪| 日韩国产欧美在线观看| 99麻豆久久久国产精品免费 | 国产一区二区三区美女| 欧美日韩一区视频| 午夜精品福利久久久| 国产日韩欧美精品一区| 青青草原综合久久大伊人精品优势 | 337p粉嫩大胆噜噜噜噜噜91av| 亚洲国产成人精品视频| 一本到不卡免费一区二区| 日本一区二区三级电影在线观看| 丁香婷婷综合色啪| 国产欧美一区二区三区在线老狼| 精品一二三四在线| 中文字幕av一区 二区| 色吧成人激情小说| 一区二区在线观看视频| 久久www免费人成看片高清| 亚洲精品视频在线观看免费 | 欧亚洲嫩模精品一区三区| 懂色av噜噜一区二区三区av| 欧洲精品一区二区| 国产在线国偷精品产拍免费yy| 欧美经典一区二区| 美女爽到高潮91| 久久人人97超碰com| 日韩欧美国产精品一区| 成人久久久精品乱码一区二区三区| 欧洲一区在线电影| 久久久综合激的五月天| 欧美一区二区三区在线视频| 日韩在线a电影| 亚洲黄色小说网站| 国产精品自在欧美一区| 日韩中文字幕一区二区三区| 亚洲电影一区二区三区| 亚洲人成精品久久久久| 日韩欧美一区二区免费| 国产色综合久久| 亚洲一卡二卡三卡四卡 | 精品久久国产老人久久综合| 国产日产欧产精品推荐色 | 精品美女一区二区三区| 激情都市一区二区| 久久免费看少妇高潮| 粉嫩蜜臀av国产精品网站| 国产精品国产三级国产普通话蜜臀 | 日韩三区在线观看| 亚洲国产精品激情在线观看| 欧美本精品男人aⅴ天堂| 欧美一级片在线| 7777精品伊人久久久大香线蕉的 | 欧美午夜电影一区| 成人avav影音| 91黄色激情网站| 久久先锋影音av| 欧美国产97人人爽人人喊| 国产精品免费观看视频| 亚洲综合清纯丝袜自拍| 美女视频一区二区三区| 欧美日免费三级在线| 久久久精品2019中文字幕之3| 夜夜嗨av一区二区三区网页| 欧美日韩国产天堂| 欧美精品第1页| 欧美日韩成人综合天天影院| 日韩精品一区二区三区蜜臀 | 欧美喷潮久久久xxxxx| 中文欧美字幕免费| 亚洲国产一区二区三区| av在线不卡网| 国产欧美日产一区| 成人美女在线观看| 亚洲欧洲国产专区| aaa亚洲精品一二三区| www国产亚洲精品久久麻豆| 久久国产福利国产秒拍| 3d动漫精品啪啪1区2区免费| 午夜精品久久久| 欧美日韩一区二区三区视频| 亚洲视频狠狠干| 欧美少妇bbb| 秋霞电影网一区二区| 久久精品人人做| 久久蜜臀精品av| 26uuu亚洲综合色欧美| 欧美一区二区成人6969| 精品乱人伦小说| 91精品久久久久久蜜臀| 欧美电影免费观看高清完整版在| 国产综合色产在线精品| 久久不见久久见免费视频1| 亚洲无人区一区| 国产一区二区免费视频| 成人国产一区二区三区精品| 91在线porny国产在线看| 欧美日本视频在线| 久久午夜电影网| 亚洲自拍偷拍网站| 91麻豆国产在线观看| 欧美三级电影在线看| 久久精品视频网| 精品成人a区在线观看| 日本乱人伦一区| 午夜精品久久久久久久99樱桃| 亚洲综合免费观看高清完整版在线 | 欧美日本一区二区三区四区| www.久久精品| 成人久久视频在线观看| 成人av午夜电影| 成人免费观看av| 国产精品中文有码| 国产a精品视频| 国产成人午夜精品影院观看视频| 日韩中文字幕不卡| 中文字幕一区二区三区蜜月| 中文字幕一区二区三| 北条麻妃一区二区三区| 一区二区三区不卡视频| 久久伊人中文字幕| 亚洲国产高清不卡| 久久精品视频免费| 91行情网站电视在线观看高清版| 色综合久久久久综合99| 色一情一乱一乱一91av| 波多野结衣在线aⅴ中文字幕不卡| 丝袜脚交一区二区| 亚洲韩国精品一区| 国产91清纯白嫩初高中在线观看| 蜜臀av一区二区在线观看| 91免费版在线| 欧美性欧美巨大黑白大战| 国产一区二区三区不卡在线观看| 久久品道一品道久久精品|