近期我會持續更新內建庫的學習筆記,主要參考的是文件 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說,不就是換個工作嘛,沒什麼了不起的。可是我總是在擔心未來。不做設計怕技術丟了,做設計又覺得沒有什麼進步的空間,想鍛...