Go語言是一種開源的編程語言,被廣泛應用于網絡編程、云計算、分布式系統等領域。

“真誠服務,讓網絡創造價值”是我們的服務理念,創新互聯建站團隊10余年如一日始終堅持在網站建設領域,為客戶提供優質服。不管你處于什么行業,助你輕松跨入“互聯網+”時代,PC網站+手機網站+公眾號+成都小程序開發。
go語言的三位作者
Go語言的設計目標是成為一種語法簡潔、執行效率高、并發性能強大的編程語言。它由Google公司研發,于2009年首次發布,并于2012年成為了開源項目。Go語言具有C語言的表達能力和Python的開發效率,同時還擁有自己獨特的語法和特性,如協程、垃圾回收機制等。因此,它被廣泛應用于網絡編程、云計算、分布式系統等領域,并且越來越受到開發者的青睞。
Go語言的出現,填補了許多編程語言在并發編程方面的空缺。它提供了一種輕量級線程模型,通過協程(goroutine)的方式,實現了高效的并發編程。同時,Go語言還支持內置的網絡編程和字節序列編解碼庫,使得網絡編程變得更加容易和高效。在云計算、分布式系統等領域,Go語言也得到了廣泛的應用。例如,Docker和Kubernetes等開源項目就是用Go語言開發的。此外,Go語言還具有代碼可讀性高、編譯速度快、編譯后的可執行文件體積小等優點,使得它成為了開發高性能、高并發應用的理想語言之一。
Go中的binary包實現了簡單的數字與字節序列的轉換以及變長值的編解碼
package main
import ( "fmt" "bytes" "encoding/binary" ) func main(){ n := 0x12345678 bytesBuffer := bytes.NewBuffer([]byte{}) //BigEndian 大端順序存儲 LittleEndian小端順序存儲 binary.Write(bytesBuffer, binary.BigEndian, int32(n)) data:=bytesBuffer.Bytes() fmt.Printf("[0]: %#x addr:%#x\n",data[0],data[0]) fmt.Printf("[0]: %#x addr:%#x\n",data[1],data[1]) fmt.Printf("[0]: %#x addr:%#x\n",data[2],data[2]) fmt.Printf("[0]: %#x addr:%#x\n",data[3],data[3]) }
輸出
[0]: 0x12 addr:0xc042010248 [1]: 0x34 addr:0xc042010249 [2]: 0x56 addr:0xc04201024a [3]: 0x78 addr:0xc04201024b
也可以使用下面的方式
n := 0x12345678 var data []byte = make([]byte,4) //操作的都是無符號整型 binary.BigEndian.PutUint32(data,uint32(n))
可以使用下面的方式判斷當前系統的字節序類型
const INT_SIZE int = int(unsafe.Sizeof(0))
//判斷我們系統中的字節序類型 func systemEdian() { var i int = 0x1 bs := (*[INT_SIZE]byte)(unsafe.Pointer(i)) if bs[0] == 0 { fmt.Println("system edian is little endian") } else { fmt.Println("system edian is big endian") } }
后端開發人員跟前端對接接口的時候,或多或少都會面臨一些溝通問題,比如說枚舉字符的定義,比如有整形狀態字段: state
通常給前端的時候,前段要做的是將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 的類型需要與結構體定義中的類型保持一致,否則自定義序列化會失敗
參考:
是數據。根據查詢知乎顯示golang序列化是在內存中把數據轉換成指定格式(data-string),反之亦然(string-datastructure)編碼也是一樣的。序列化(Serialization)是將對象的狀態信息轉換為可以存儲或傳輸的形式的過程。
分享題目:go語言序列 go語言排序算法
標題鏈接:http://www.yijiale78.com/article0/ddgcgoo.html
成都網站建設公司_創新互聯,為您提供網頁設計公司、App設計、商城網站、網站維護、軟件開發、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯