ホーム プログラミング言語 golang go file processing Go 言語バイナリ ファイルの読み取りおよび書き込み操作






Go 言語バイナリ ファイルの読み取りおよび書き込み操作




 
 
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言語とは?できることや学ぶメリット・将来性について解説