Go 內建庫第一季 json

2021-09-11 17:44:44 字數 2891 閱讀 3658

近期我會持續更新內建庫的學習筆記,主要參考的是文件 godoc 和 內建庫的原始碼

在日常開發過程中,使用最頻繁的當然是內建庫,無數的開源專案,無不是在內建庫的基礎之上進行衍生、開發,所以其實是有很大的必要進行梳理學習。

本節的主題:內建庫 json

大綱: 既然是 json 操作,那麼核心應該是包括兩個方面:

對應的方法:

func marshal(v inte***ce{}) (byte, error)

func marshalindent(v inte***ce{}, prefix, indent string) (byte, error)

func unmarshal(data byte, v inte***ce{}) error

具體如何使用呢?

布林型別

func booltojson(ok bool) byte 

func jsontobool(value byte) bool

func main

()>>

true

true

複製**

數值型

func inttojson(value int) byte 

func main

()>>

12複製**

結構體

結構體 轉換為 json

type info struct 

func (i info) marshalop() byte

func main

() fmt.println(string(info.marshalop()))

var otherinfo info

otherinfo.name = ""

otherinfo.age = 20

otherinfo.city = "beijing"

otherinfo.company = "only you"

fmt.println(string(otherinfo.marshalop()))

}>>

複製**

還記得我們之間講的 反射章節 結構體的 tag 嗎?

json 轉換為 結構體:

func unmarshalexample(value byte) (result info) 

func main

()`)))

}>>

複製**

好,至此,我們常用的 json 操作就這些,主要兩個方面:marshal 和 unmarshal

大概講述了下 結構體的 tag 的作用:

列舉幾個再常用的:

valid

判斷是否是有效的 json 格式的資料

func main

()`)))

}>>

false

複製**

marshaler介面,需要實現 marshaljson 方法

自定義序列化返回值

type marshaler inte***ce 

複製**

type selfmarshal struct 

func (self selfmarshal) marshaljson() (byte, error)

return byte(result), nil

}func main

() self.age = 20

self.name = "xiewei"

self.city = "hangzhou"

selfjsonmarshal, err := json.marshal(self)

fmt.println(err, string(selfjsonmarshal))

}>>

"name:--xiewei,age:--20,city:--hangzhou"

複製**

type jsontime time.time

//實現它的json序列化方法

func (this jsontime) marshaljson() (byte, error)

type test struct

func main

() t.date = jsontime(time.now())

t.name = "hello world"

t.state = true

body, _ := json.marshal(t)

fmt.println(string(body))

}>>

複製**

各 json 解析庫效能比對 | 各 json 解析庫效能比對

收穫:

func (self selfmarshal) marshaljson() (byte, error) 

複製**

上文**會報錯,為什麼?因為不是標準 json 格式的資料。

所以通常建議這麼做:

func (self selfmarshal) marshaljson() (byte, error) 

return byte(result), nil

}複製**

即將字串 marshal 處理。

《完》

Go 內建庫第一季 strconv

日常編寫 的過程中,字串和數值型 布林型別之間的轉換算是很頻繁了。所以有必要研究下內建的 strconv 庫。這節的主題是 字串和其他基本資料型別之間的轉換。除此之外,還有其他型別的轉換,最值得研究的就是 json 這些內容,下期再講。大綱 怎麼知道這些答案?func atoi s string i...

初學第一季

要增強體力,只有運動 要豐富知識,就只有讀書 鳥哥。學習linux也有段時間了,但是期間看了關於arm方面的書籍,及作業系統方面的書,linux用虛擬機器vm裝的,平時疏於聯絡。在鳥哥的linux書中從新開始學習,打下基礎。x window system 視窗系統名 由mit 所開發的一種流通的視窗...

自我反思 第一季

又來寫點東西了。考完了,有空了。最近總是在剖析自己。發現自己真是乙個 活在未來的人 以前這樣,現在還是這樣,人的性格真還是一樣難以改變的東西。現在我就在乙個三岔口,也許更多口。豬 gg說,不就是換個工作嘛,沒什麼了不起的。可是我總是在擔心未來。不做設計怕技術丟了,做設計又覺得沒有什麼進步的空間,想鍛...