Go 言語のバイナリ (gob) 形式は、自己記述的なバイナリのシーケンスです。内部表現から見ると、Go 言語のバイナリ形式は 0 個以上のブロックのシーケンスで構成されており、各ブロックにはバイト番号、0 個以上の typeId-typeSpecific ペアのシーケンス、および typeId-value ペアが含まれます。
typeId と value のペアの typeId が事前定義されている場合 (bool、int、string など)、これらの typeId と typeSpecific のペアは省略できます。それ以外の場合、型ペアはカスタム型 (カスタム構造体など) を記述するために使用されます。型ペアと値ペアの間で typeId に違いはありません。
後で説明するように、encoding/gob パッケージがすべての低レベルの詳細を舞台裏で処理してくれるため、gob 形式の内部構造を知らなくても gob 形式を使用できます。
Go 言語の encoding/gob パッケージも、encoding/json パッケージと同じエンコードおよびデコード機能を提供しており、使いやすいです。一般に、人間が読みやすいという要件がない場合、gob 形式は、Go 言語でのファイルの保存やネットワーク送信に最も便利な形式です。
Go言語バイナリファイルを書き込む
Go 言語がバイナリ ファイルを生成する方法を示す簡単な例を使用してみましょう。コードは次のとおりです。
package main
import (
"encoding/gob"
"fmt"
"os"
)
func main() {
info := "https://it-kiso.com/golang/"
file, err := os.Create("./output.gob")
if err != nil {
fmt.Println("ファイルの作成に失敗しました", err.Error())
return
}
defer file.Close()
encoder := gob.NewEncoder(file)
err = encoder.Encode(info)
if err != nil {
fmt.Println("エンコードエラー", err.Error())
return
} else {
fmt.Println("エンコードに成功しました")
}
}
上記のコードを実行すると、現在のディレクトリに Output.gob ファイルが生成されます。ファイルの内容は次のとおりです。
210c 001e 6874 7470 3a2f 2f63 2e62 6961
6e63 6865 6e67 2e6e 6574 2f67 6f6c 616e
672f
Go 言語のバイナリ ファイルを読み取る
gob データの読み取りは書き込みと同じくらい簡単です。サンプル コードは次のとおりです。
package main
import (
"encoding/gob"
"fmt"
"os"
)
func main() {
file, err := os.Open("./output.gob")
if err != nil {
fmt.Println("ファイルを開くことができません", エラー.Error())
return
}
defer file.Close()
decoder := gob.NewDecoder(file)
info := ""
err = decoder.Decode(&info)
if err != nil {
fmt.Println("復号失敗しました", er.Error())
} else {
fmt.Println("復号成功しました")
fmt.Println(info)
}
}
「 Go 言語バイナリ ファイルの読み取りおよび書き込み操作」についてわかりやすく解説!絶対に観るべきベスト2動画
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
【初心者必見!】Go言語とは?できることや学ぶメリット・将来性について解説