99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

go語言自定義的類型,go語言自定義類型JSON

Golang中的自定義json序列化

后端開發人員跟前端對接接口的時候,或多或少都會面臨一些溝通問題,比如說枚舉字符的定義,比如有整形狀態字段: state

創新互聯成立以來不斷整合自身及行業資源、不斷突破觀念以使企業策略得到完善和成熟,建立了一套“以技術為基點,以客戶需求中心、市場為導向”的快速反應體系。對公司的主營項目,如中高端企業網站企劃 / 設計、行業 / 企業門戶設計推廣、行業門戶平臺運營、app軟件定制開發成都做手機網站、微信網站制作、軟件開發、德陽服務器托管等實行標準化操作,讓客戶可以直觀的預知到從創新互聯可以獲得的服務效果。

通常給前端的時候,前段要做的是將1,2,3以及對應的中文釋義存儲為key/value的形式,key與value單看都無法知道對方的語義,

比如我只知道狀態值為“1”, 是無法將其與“成功”對應起來的(當然這套狀態的設計者肯定是知道的),后端通常給到前端的restful api

接口定義也是key/value的形式,這乍一看其實也沒啥毛病,只要有key/value也沒問題,后端定義通常會是

但數字的表現形式終歸是不不太明確的,如果對狀態的定義換成以下形式:

基本可以理解為中英文互譯了,理解起來也會更清晰一些不是,如果這么做的話,后端給到前端的響應字段狀態的類型就需要修改成字符器格式

后端還是要做一層字符串到整型的轉換,從目的來講,我們只是想返給前端的 state 字段是字符串而已,也就是在做json序列化的時候將整型與字符串做一層轉換,有更優雅的做法如下所示

只需要做兩件事,自定義類型 MyState ,實現 MarshalJSON 方法

只要類型實現了 MarshalJSON 方法,在json序列化時就會調用此方法,如此一來,我們就輕松實現了自定義json序列化,反序列化同樣如此

實現起來也很簡單

需要注意的是, UnmarshalJSON 方法操作過程需要給 receiver 也就是 u 賦值,所以必須是指針類型,同樣的,在實現

MarshalJSON 方法, receiver 的類型需要與結構體定義中的類型保持一致,否則自定義序列化會失敗

參考:

go語言中 int8是什么類型

C語言中變量的聲明/定義格式如下:存儲類型 類型修飾符 數據類型 變量名;存儲類型:用來指明變量的存儲位置,即運行該變量在哪一段分配內存空間,常見的存儲位置有auto、extern、register、static,在一段執行程序中,可以為變量分配存儲空間的有BSS、數據區、棧區、堆區。類型修飾符:用來修飾變量的存儲和表現方式。包括long、short、signed、unsigned、void、const、volatile等。數據類型:用來指明該變量的存儲大小,即一個該類型的變量要占用多少內存空間。基本數據類型有(char、int、float、指針類型)和由基本數據類型組成的用戶自定義類型(struct、enum、typedef、union)

講講go語言的結構體

作為C語言家族的一員,go和c一樣也支持結構體。可以類比于java的一個POJO。

在學習定義結構體之前,先學習下定義一個新類型。

新類型 T1 是基于 Go 原生類型 int 定義的新自定義類型,而新類型 T2 則是 基于剛剛定義的類型 T1,定義的新類型。

這里要引入一個底層類型的概念。

如果一個新類型是基于某個 Go 原生類型定義的, 那么我們就叫 Go 原生類型為新類型的底層類型

在上面的例子中,int就是T1的底層類型。

但是T1不是T2的底層類型,只有原生類型才可以作為底層類型,所以T2的底層類型還是int

底層類型是很重要的,因為對兩個變量進行顯式的類型轉換,只有底層類型相同的變量間才能相互轉換。底層類型是判斷兩個類型本質上是否相同的根本。

這種類型定義方式通常用在 項目的漸進式重構,還有對已有包的二次封裝方面

類型別名表示新類型和原類型完全等價,實際上就是同一種類型。只不過名字不同而已。

一般我們都是定義一個有名的結構體。

字段名的大小寫決定了字段是否包外可用。只有大寫的字段可以被包外引用。

還有一個點提一下

如果換行來寫

Age: 66,后面這個都好不能省略

還有一個點,觀察e3的賦值

new返回的是一個指針。然后指針可以直接點號賦值。這說明go默認進行了取值操作

e3.Age 等價于 (*e3).Age

如上定義了一個空的結構體Empty。打印了元素e的內存大小是0。

有什么用呢?

基于空結構體類型內存零開銷這樣的特性,我們在日常 Go 開發中會經常使用空 結構體類型元素,作為一種“事件”信息進行 Goroutine 之間的通信

這種以空結構體為元素類建立的 channel,是目前能實現的、內存占用最小的 Goroutine 間通信方式。

這種形式需要說的是幾個語法糖。

語法糖1:

對于結構體字段,可以省略字段名,只寫結構體名。默認字段名就是結構體名

這種方式稱為 嵌入字段

語法糖2:

如果是以嵌入字段形式寫的結構體

可以省略嵌入的Reader字段,而直接訪問ReaderName

此時book是一個各個屬性全是對應類型零值的一個實例。不是nil。這種情況在Go中稱為零值可用。不像java會導致npe

結構體定義時可以在字段后面追加標簽說明。

tag的格式為反單引號

tag的作用是可以使用[反射]來檢視字段的標簽信息。

具體的作用還要看使用的場景。

比如這里的tag是為了幫助 encoding/json 標準包在解析對象時可以利用的規則。比如omitempty表示該字段沒有值就不打印出來。

網頁名稱:go語言自定義的類型,go語言自定義類型JSON
分享URL:http://www.yijiale78.com/article34/hegdpe.html

成都網站建設公司_創新互聯,為您提供網站改版域名注冊App開發搜索引擎優化網頁設計公司用戶體驗

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名