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

主頁 > 知識庫 > Golang JSON的進階用法實例講解

Golang JSON的進階用法實例講解

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

痛點

json 是當前最常用的數據傳輸格式之一,純文本,容易使用,方便閱讀,在通信過程中大量被使用。 

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

你是否遇到過json反解析報錯是因為填入字段的類型不匹配導致的?例如:

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

你是否有json某字段兼容2種或者多種的數據結構的需求?

你是否想讓程序更優雅,更具有適配性,而不在被這些小細節頭痛?

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

重現問題

我們給了用戶一個json如下:

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

但是,業務方卻誤填了”8080”,結果我們程序反解析報錯,導致業務失敗。

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

或許你認為這是業務方的問題,但我認為我們可以更優雅的解決這個問題。

如何解決問題

我們先定義了一個結構體

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

心細的你會發現,Port既不是int也不是string類型,而是Port類型,而Port類型是:

type Type int

const (
 Int Type = iota
 String
)

type Port struct {
 Type Type
 IntVal int
 StrVal string
}

在Port結構體中,我們發現了Type類型, 而Type類型包括了int,string兩種類型。接下來就非常重要了,我們需要實現以下這兩個接口。

json.Unmarshaller interface
json.Marshaller interface

實現代碼如下:

type Port struct {
 Type Type
 IntVal int
 StrVal string
}

// 實現 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)
}

// 實現 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")
 }
}

接下來測試:

測試反解析

測試反解析int

給出json數據:

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

反解析得到的結構體數據如下:

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

測試反解析string:

給出json數據:

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

反解析得到的結構體數據如下:

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

測試編碼的json

測試編碼int的結構體如下:

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

編碼后的json如下:

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

測試編碼string的結構體如下:

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

編碼后的json數據如下:

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

在反編碼測試中,你會發現當json填入的類型不同時,會編碼到結構體中對應的字段中。

在編碼測試中, 具體編碼那個數據是由Type來確定的。

總結

其實,這篇文章只是分享了下json中使用的小技巧,他打破了在使用json時,需要呆板的數據結構的印象,轉而走向了多變,靈活跳脫的風格,其實,這這個小tips的核心在于實現Unmarshaller,Marshaller這兩個結構體,他們的實現是這個分享的關鍵,當然,你可以實現如開篇所說的那樣,json某字段兼容2種及以上結構,當然,你也可以對yaml,toml等進行折騰,都會得到你想要的答案。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

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

標簽:昭通 東營 泰安 駐馬店 瀘州 阿壩 晉中 滄州

巨人網絡通訊聲明:本文標題《Golang JSON的進階用法實例講解》,本文關鍵詞  Golang,JSON,的,進階,用法,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Golang JSON的進階用法實例講解》相關的同類信息!
  • 本頁收集關于Golang JSON的進階用法實例講解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    偷拍日韩校园综合在线| 欧美激情一区二区三区全黄| 国产成人免费视| 国产精一品亚洲二区在线视频| 日本免费在线视频不卡一不卡二| 丝袜诱惑亚洲看片| 麻豆国产91在线播放| 欧美aaaaa成人免费观看视频| 日韩精品一区第一页| 婷婷久久综合九色综合伊人色| 午夜视频在线观看一区| 日韩成人伦理电影在线观看| 捆绑变态av一区二区三区| 国产成人亚洲综合色影视| 国产+成+人+亚洲欧洲自线| 99国产精品久久久| 欧美精品三级日韩久久| 久久综合精品国产一区二区三区| 久久久久久久久久久黄色| 最新日韩av在线| 亚洲成人动漫av| 国产精品2024| 欧日韩精品视频| 欧美精品一区二区精品网| 中文字幕亚洲区| 天堂久久久久va久久久久| 国产乱子轮精品视频| www.日韩精品| 日韩一区二区免费高清| 中文字幕欧美一| 免费在线观看一区二区三区| 国产一区二区三区精品视频 | 亚洲图片你懂的| 蜜臀久久99精品久久久画质超高清 | 成人免费在线播放视频| 亚洲高清视频中文字幕| 国产精品一区二区三区网站| 欧美亚洲尤物久久| 久久精品欧美一区二区三区麻豆| 一区二区高清免费观看影视大全| 国产在线视频一区二区| 欧美午夜视频网站| 国产精品美女一区二区在线观看| 日本美女视频一区二区| 色综合久久九月婷婷色综合| 精品国产乱码久久久久久图片| 亚洲一区二区三区在线看| 国产成人免费高清| 日韩精品在线一区二区| 婷婷开心久久网| 色一情一乱一乱一91av| 亚洲国产精品ⅴa在线观看| 免费成人小视频| 欧美日韩国产精选| 亚洲高清不卡在线| 在线观看一区二区精品视频| 国产精品不卡在线观看| 国产一区不卡视频| 精品91自产拍在线观看一区| 天天射综合影视| 欧美高清激情brazzers| 亚洲国产视频网站| 欧美视频一区二区三区在线观看 | 欧美精品久久一区| 一区二区三区波多野结衣在线观看| 成人网男人的天堂| 国产日本欧美一区二区| 国产成人精品综合在线观看 | 国产精品免费视频网站| 国产精品中文字幕欧美| 欧美精品一区二区久久久 | 1024成人网| 99久久久精品| 一区二区三区高清| 欧美日韩精品久久久| 亚洲国产一区视频| 欧美一区二区三区免费观看视频| 午夜精品福利一区二区三区av| 欧美放荡的少妇| 麻豆精品一区二区综合av| 精品国产青草久久久久福利| 麻豆久久久久久久| 国产日产精品一区| 91精品1区2区| 亚瑟在线精品视频| 欧美精品一区二区三区久久久| 国产福利一区二区三区视频| 国产精品午夜免费| 在线免费视频一区二区| 日韩黄色片在线观看| 精品va天堂亚洲国产| 成人免费视频app| 亚洲一区二区在线观看视频| 日韩欧美色综合| 成人黄色免费短视频| 亚洲自拍偷拍综合| 欧美变态tickling挠脚心| 成人晚上爱看视频| 亚洲国产欧美在线| 久久久久久久网| 在线免费观看视频一区| 精品亚洲成a人在线观看| 国产精品麻豆网站| 欧美一级久久久| 色综合中文字幕国产| 五月婷婷综合网| 国产精品午夜久久| 日韩欧美中文字幕公布| av动漫一区二区| 久久不见久久见免费视频1| 国产精品国产三级国产普通话99| 91精品国产一区二区三区| 成人激情黄色小说| 乱中年女人伦av一区二区| 一区二区三区中文字幕电影| 久久这里只有精品视频网| 欧美日韩大陆一区二区| 成人短视频下载| 国产精品综合一区二区| 婷婷综合另类小说色区| 亚洲欧美一区二区在线观看| 日韩免费视频一区| 欧美日本不卡视频| 91精品福利视频| 91伊人久久大香线蕉| 国产精品一级片| 国产一区三区三区| 美女精品自拍一二三四| 亚洲一区二区三区精品在线| 中文字幕在线观看不卡视频| 久久视频一区二区| 欧美大片一区二区三区| 欧美丰满美乳xxx高潮www| 在线观看视频91| 91福利区一区二区三区| 91香蕉国产在线观看软件| 处破女av一区二区| 国产91精品久久久久久久网曝门 | 日韩av电影免费观看高清完整版 | 粉嫩aⅴ一区二区三区四区 | 伊人夜夜躁av伊人久久| 中文字幕乱码一区二区免费| 2024国产精品| 久久久精品蜜桃| 欧美国产激情二区三区| 中文字幕欧美日韩一区| 中文字幕高清一区| 成人欧美一区二区三区视频网页| 国产精品久久久久久久久晋中| 亚洲国产激情av| 中文字幕一区三区| 亚洲欧洲色图综合| 亚洲精选视频在线| 亚洲成人av在线电影| 午夜a成v人精品| 日本va欧美va瓶| 国产精品亚洲第一区在线暖暖韩国| 国产成人亚洲精品狼色在线| 成人丝袜视频网| 欧美性一区二区| 日韩区在线观看| 26uuu精品一区二区在线观看| 国产日产欧美一区| 最好看的中文字幕久久| 亚洲va欧美va天堂v国产综合| 日本网站在线观看一区二区三区| 韩国女主播成人在线| 成人黄色小视频| 欧美日韩一区不卡| 精品国产三级电影在线观看| 中文在线一区二区| 香蕉av福利精品导航| 精品亚洲免费视频| 色综合久久综合网97色综合| 555夜色666亚洲国产免| 日本一区二区三级电影在线观看 | 国产精品久久午夜夜伦鲁鲁| 一个色综合av| 国产精品亚洲午夜一区二区三区| 972aa.com艺术欧美| 日韩一区二区免费在线电影| 国产午夜久久久久| 亚洲国产精品一区二区www | 亚洲永久精品国产| 国产一区二区在线免费观看| 波多野结衣的一区二区三区| 在线播放中文字幕一区| 国产精品国产精品国产专区不片 | 国产精品麻豆欧美日韩ww| 一区二区不卡在线播放| 国产成人免费xxxxxxxx| 在线播放日韩导航| 亚洲欧美日本在线| 国产麻豆成人传媒免费观看| 欧美日韩精品福利| 亚洲精品视频自拍| 成人午夜视频免费看| 精品久久国产字幕高潮| 日韩影院精彩在线| 91久久精品午夜一区二区|