gob は、Golang パッケージに付属するデータ構造シリアル化のためのエンコード/デコード ツールで、エンコードには Encoder、デコードには Decoder が使用されます。 Gob は、io.Writer インターフェイスを使用して、NewEncoder() 関数を通じて Encoder オブジェクトを作成し、Encode() メソッドを呼び出してエンコード操作を実装します。io.Reader インターフェイスを使用して、NewDecoder() 関数を通じて Decoder オブジェクトを作成し、呼び出しますDecode() メソッドを使用してデコード操作を完了します。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
gob の正式名は次のとおりです: Go binary
Golang にはデータ構造シリアル化エンコード/デコード ツール が付属しています。つまり、gob は話すことができます。 Go のデータ構造は何かにシリアル化されますが、逆シリアル化することもできます。シリアル化がどのようなものになるかについては後ほど説明しますが、文字列に変換されるかバイナリ ストリームに変換されるかは関係ありません。いずれにせよ、機能はシリアル化です。
Gob を使用する場合、Encoder オブジェクトと Decoder オブジェクトに注意する必要があります。名前のとおり、1 つはエンコード時に使用され、もう 1 つはデコード時に使用されます。この 2 つのオブジェクトを取得する方法を見てみましょう。
## したがって、Encoder オブジェクトと Decoder オブジェクトを取得するには、これら 2 つの関数を呼び出す必要があることは明らかです。ここでのパラメータは io.Writer および io.Reader インターフェイス タイプであることに注意してください。これら 2 つのインターフェイスは前の講義で紹介したため、ここで必要なパラメータはそれぞれ io.Writer および io.Reader インターフェイス タイプを実装するオブジェクトです。 エンコーダとデコーダにはそれぞれ 1 つのメイン メソッドがあります: ここを見ると、すでに次の結論が得られます :Gob は io.Writer インターフェイスを使用し、NewEncoder() 関数を通じて Encoder オブジェクトを作成し、Encode() メソッドを呼び出してエンコード操作を実装します; io.Reader インターフェイスを使用して Decoder を作成しますNewDecoder() 関数を通じてオブジェクトを取得し、Decode() メソッドを呼び出してデコード操作を完了します。
次に、この Encoder と Decoder を使用して gob を簡単に始めてみましょう。最初の例を見てみましょう 例 1: データ構造とバイト。( 間のバッファ変換)1package main 2 3import ( 4 "bytes" 5 "fmt" 6 "encoding/gob" 7 "io" 8) 9 10//准备编码的数据 11type P struct { 12 X, Y, Z int 13 Name string 14} 15 16//接收解码结果的结构 17type Q struct { 18 X, Y *int32 19 Name string 20} 21 22func main() { 23 //初始化一个数据 24 data := P{3, 4, 5, "CloudGeek"} 25 //编码后得到buf字节切片 26 buf := encode(data) 27 //用于接收解码数据 28 var q *Q 29 //解码操作 30 q = decode(buf) 31 //"CloudGeek": {3,4} 32 fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y) 33 34} 35 36func encode(data interface{}) *bytes.Buffer { 37 //Buffer类型实现了io.Writer接口 38 var buf bytes.Buffer 39 //得到编码器 40 enc := gob.NewEncoder(&buf) 41 //调用编码器的Encode方法来编码数据data 42 enc.Encode(data) 43 //编码后的结果放在buf中 44 return &buf 45} 46 47func decode(data interface{}) *Q { 48 d := data.(io.Reader) 49 //获取一个解码器,参数需要实现io.Reader接口 50 dec := gob.NewDecoder(d) 51 var q Q 52 //调用解码器的Decode方法将数据解码,用Q类型的q来接收 53 dec.Decode(&q) 54 return &q 55}例 2: ファイルへのデータ構造のシリアル化と逆シリアル化
1package main 2 3import ( 4 "encoding/gob" 5 "os" 6 "fmt" 7) 8 9//试验用的数据类型 10type Address struct { 11 City string 12 Country string 13} 14 15//序列化后数据存放的路径 16var filePath string 17 18func main() { 19 filePath = "./address.gob" 20 encode() 21 pa := decode() 22 fmt.Println(*pa) //{Chengdu China} 23} 24 25//将数据序列号后写到文件中 26func encode() { 27 pa := &Address{"Chengdu", "China"} 28 //打开文件,不存在的时候新建 29 file, _ := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY, 0666) 30 defer file.Close() 31 32 //encode后写到这个文件中 33 enc := gob.NewEncoder(file) 34 enc.Encode(pa) 35} 36 37//从文件中读取数据并反序列化 38func decode() *Address { 39 file, _ := os.Open(filePath) 40 defer file.Close() 41 42 var pa Address 43 //decode操作 44 dec := gob.NewDecoder(file) 45 dec.Decode(&pa) 46 return &pa 47}上記 2 つの例のいずれでもない 難しいので、エラー処理とデシリアライズを削除しました。これら 2 つの例を辛抱強く読めば、gob のエンコードとデコードの本質を理解できるはずです。 gob とは何かを理解した上で、開発に gob を使用する必要がある場合は、公式ドキュメントを詳しく読んで詳細を学ぶことをお勧めします: https://golang.org/pkg/encoding/gob /【関連する推奨事項:
以上がgolangゴブとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。