最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言中序列化與反序列化示例詳解

 更新時(shí)間:2022年07月21日 11:04:28   作者:前端若水  
我們的數(shù)據(jù)對(duì)象要在網(wǎng)絡(luò)中傳輸或保存到文件,就需要對(duì)其編碼和解碼動(dòng)作,Go語(yǔ)言當(dāng)然也支持所有這些編碼格式,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言中序列化與反序列化的相關(guān)資料,需要的朋友可以參考下

前言

Go語(yǔ)言的序列化與反序列化在工作中十分常用,在Go語(yǔ)言中提供了相關(guān)的解析方法去解析JSON,操作也比較簡(jiǎn)單

序列化

// 數(shù)據(jù)序列化
func Serialize(v interface{})([]byte, error)

// fix參數(shù)用于添加前綴
//idt參數(shù)用于指定你想要縮進(jìn)的方式
func serialization (v interface{}, fix, idt string) ([]byte, error)

array、slice、map、struct對(duì)象

//struct
import (
	"encoding/json"
	"fmt"
)

type Student struct {
	Id   int64
	Name string
	Desc string
}

 func fn() {
	std := &Student{0, "Ruoshui", "this to Go"}
	data, err := json.MarshalIndent(std, "", "   ")  
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(string(data))
}
//array、slice、map
func fc() {
	s := []string{"Go", "java", "php"}
	d, _ := json.MarshalIndent(s, "", "\t")
	fmt.Println(string(d))
	
	m := map[string]string{
		"id": "0",
		"name":"ruoshui",
		"des": "this to Go",
	}
	bytes, _ := json.Marshal(m)
	fmt.Println(string(bytes))
}

序列化的接口

在json.Marshal中,我們會(huì)先去檢測(cè)傳進(jìn)來(lái)對(duì)象是否為內(nèi)置類(lèi)型,是則編碼,不是則會(huì)先檢查當(dāng)前對(duì)象是否已經(jīng)實(shí)現(xiàn)了Marshaler接口,實(shí)現(xiàn)則執(zhí)行MarshalJSON方法得到自定義序列化后的數(shù)據(jù),沒(méi)有則繼續(xù)檢查是否實(shí)現(xiàn)了TextMarshaler接口,實(shí)現(xiàn)的話(huà)則執(zhí)行MarshalText方法對(duì)數(shù)據(jù)進(jìn)行序列化

MarshalJSON與MarshalText方法雖然返回的都是字符串,不過(guò)MarshalJSON方法返回的帶引號(hào),MarshalText方法返回的不帶引號(hào)

//返回帶引號(hào)字符串
type Marshaler interface {
    MarshalJSON() ([]byte, error) 
}
type Unmarshaler interface {
	UnmarshalJSON([]byte) error
}

//返回不帶引號(hào)的字符串
type TextMarshaler interface {
    MarshalText() (text []byte, err error) 
}
type TextUnmarshaler interface {
	UnmarshalText(text []byte) error
}

反序列化

func Unmarshal(data [] byte, arbitrarily interface{}) error

該函數(shù)會(huì)把傳入的數(shù)據(jù)作為json解析,然后把解析完的數(shù)據(jù)存在arbitrarily中,arbitrarily是任意類(lèi)型的參數(shù),我們?cè)谟么撕瘮?shù)進(jìn)行解析時(shí),并不知道傳入?yún)?shù)類(lèi)型所以它可以接收所有類(lèi)型且它一定是一個(gè)類(lèi)型的指針

slice、map、struct反序列化

//struct
type Student struct {
	Id int64    `json:"id,string"`
	Name string `json:"name,omitempty"`
	Desc string `json:"desc"`
}

func fn() {
	str := `{"id":"0", "name":"ruoshui", "desc":"new Std"}`
	var st Student
	_ = json.Unmarshal([]byte(str), &st)
	fmt.Println(st)
}
//slice和map
func f() {
	slice := `["java", "php", "go"]`
	var sli []string
	_ = json.Unmarshal([]byte(slice), &sli)
	fmt.Println(sli)


	mapStr := `{"a":"java", "b":"node", "c":"php"}`
	var newMap map[string]string
	_ = json.Unmarshal([]byte(mapStr), &newMap)
	fmt.Println(newMap)
}

總結(jié)

到此這篇關(guān)于Go語(yǔ)言中序列化與反序列化的文章就介紹到這了,更多相關(guān)Go序列化與反序列化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang標(biāo)準(zhǔn)庫(kù)之errors包應(yīng)用方式

    Golang標(biāo)準(zhǔn)庫(kù)之errors包應(yīng)用方式

    Go語(yǔ)言的errors包提供了基礎(chǔ)的錯(cuò)誤處理能力,允許通過(guò)errors.New創(chuàng)建自定義error對(duì)象,error在Go中是一個(gè)接口,通過(guò)實(shí)現(xiàn)Error方法來(lái)定義錯(cuò)誤文本,對(duì)錯(cuò)誤的比較通?;趯?duì)象地址,而非文本內(nèi)容,因此即使兩個(gè)錯(cuò)誤文本相同
    2024-10-10
  • 基于go微服務(wù)效率工具goctl深度解析

    基于go微服務(wù)效率工具goctl深度解析

    這篇文章主要為大家介紹了基于go微服務(wù)效率工具goctl深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go語(yǔ)言中三個(gè)輸入函數(shù)(scanf,scan,scanln)的區(qū)別解析

    Go語(yǔ)言中三個(gè)輸入函數(shù)(scanf,scan,scanln)的區(qū)別解析

    本文詳細(xì)介紹了Go語(yǔ)言中三個(gè)輸入函數(shù)Scanf、Scan和Scanln的區(qū)別,包括用法、功能和輸入終止條件等,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Go中數(shù)組傳參的幾種方式小結(jié)

    Go中數(shù)組傳參的幾種方式小結(jié)

    本文主要介紹了Go中數(shù)組傳參的幾種方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Go語(yǔ)言中sync.Cond使用詳解

    Go語(yǔ)言中sync.Cond使用詳解

    本文主要介紹了Go語(yǔ)言中sync.Cond使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayout

    Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayo

    這篇文章主要為大家介紹了Go Excelize API源碼解讀GetSheetViewOptions與SetPageLayout方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Windows系統(tǒng)中搭建Go語(yǔ)言開(kāi)發(fā)環(huán)境圖文詳解

    Windows系統(tǒng)中搭建Go語(yǔ)言開(kāi)發(fā)環(huán)境圖文詳解

    GoLand?是?JetBrains?公司推出的商業(yè)?Go?語(yǔ)言集成開(kāi)發(fā)環(huán)境(IDE),這篇文章主要介紹了Windows系統(tǒng)中搭建Go語(yǔ)言開(kāi)發(fā)環(huán)境詳解,需要的朋友可以參考下
    2022-10-10
  • Go語(yǔ)言網(wǎng)站使用異步編程和Goroutine提高Web的性能

    Go語(yǔ)言網(wǎng)站使用異步編程和Goroutine提高Web的性能

    作為一門(mén)現(xiàn)代化編程語(yǔ)言,Go語(yǔ)言提供了強(qiáng)大的異步編程能力,使得程序員可以以更高效的方式處理并發(fā)任務(wù),在Go語(yǔ)言中,使用Goroutine在單個(gè)進(jìn)程中實(shí)現(xiàn)多任務(wù)并行處理,以及如何使用協(xié)程池來(lái)進(jìn)一步提高Web服務(wù)器的處理能力,
    2024-01-01
  • 手把手帶你走進(jìn)Go語(yǔ)言之語(yǔ)法基礎(chǔ)解析

    手把手帶你走進(jìn)Go語(yǔ)言之語(yǔ)法基礎(chǔ)解析

    這篇文章主要介紹了手把手帶你走進(jìn)Go語(yǔ)言之語(yǔ)法基礎(chǔ),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Go語(yǔ)言如何獲取goroutine的id

    Go語(yǔ)言如何獲取goroutine的id

    在Go語(yǔ)言中,獲取?goroutine的id并不像其他編程語(yǔ)言那樣容易,但依然有辦法,這篇文章就來(lái)和大家聊聊具體實(shí)現(xiàn)的方法,感興趣的小伙伴可以了解下
    2024-12-12

最新評(píng)論

林州市| 日照市| 无极县| 濮阳市| 家居| 元江| 尼木县| 黔西| 惠来县| 理塘县| 红河县| 新宁县| 金溪县| 台北县| 丰顺县| 广汉市| 桦川县| 独山县| 芜湖市| 安西县| 宁城县| 通许县| 酒泉市| 辛集市| 邯郸县| 肇东市| 临安市| 望江县| 耒阳市| 阳朔县| 眉山市| 高陵县| 高清| 稷山县| 屯留县| 乌拉特后旗| 南郑县| 峨眉山市| 左贡县| 吉水县| 南投县|