関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。たまに使いたいときに忘れるので、ここにメモメモ。。。
ioパッケージの下には、ある目的に特化したストリームがいろいろあります。
今回は、指定したオフセットから書き込む動きをしてくれる io.OffsetWriter について。
サンプル
package ioop import ( "bufio" "io" "os" "path/filepath" "github.com/devlights/gomy/errs" "github.com/devlights/gomy/output" ) // OffsetWrite は、io.OffsetWriter を利用したサンプルです。 // // io.OffsetWriter は、io.WriterAt インターフェースを実装しているものを要求する。 // // os.File が io.WriterAt を実装している。 // // # REFERENCES // - https://pkg.go.dev/io@go1.22.2#OffsetWriter // - https://cs.opensource.google/go/go/+/go1.22.2:src/io/io.go;l=570 func OffsetWrite() error { w, err := os.CreateTemp(os.TempDir(), "trygolang") if err != nil { return err } fstat := errs.Drop(w.Stat()) { defer w.Close() bufW := bufio.NewWriter(w) bufW.WriteString("helloworld こんにちは世界") bufW.Flush() offW := io.NewOffsetWriter(w, 11) // "helloworld " の次の位置(つまり「こ」)にオフセットを設定 offW.Write([]byte("コンニチハ")) offW.Seek(int64(15), io.SeekStart) // "コンニチハ" の次の位置(つまり「世」)にシークポジションをセット offW.Write([]byte("セカイ")) } data := errs.Drop(os.ReadFile(filepath.Join(os.TempDir(), fstat.Name()))) output.Stdoutl("[offW]", string(data)) return nil }
try-golang/examples/basic/ioop/offsetwrite.go at main · devlights/try-golang · GitHub
実行すると以下のようになります。
$ task task: [build] go build . task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: ioop_offset_write [Name] "ioop_offset_write" [offW] helloworld コンニチハセカイ [Elapsed] 165.78µs
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。