Go で一時ファイルに書き込んだばかりのデータを読み取れないのはなぜですか?
一時ファイルに書き込まれたばかりのデータを読み取る方法
問題の概要
試行時データを一時ファイルに書き込んでから Go で読み取ると、ユーザーは問題に遭遇する可能性があります。ファイルへのデータの書き込みは成功したものの、その後のデータの取得は困難であることが判明しました。
解決策
問題の核心は、ioutil.TempFile の動作方法にあります。この関数は一時ファイルを作成し、読み取りと書き込みの両方のためにそれを開きます。その結果、書き込み操作の後、ファイル内のポインターはデータの最後に配置されます。
この課題に対処するには、試行する前に *os.File.Seek を使用してファイルの先頭をシークする必要があります。そこから読むこと。この操作によりポインターが先頭にリセットされ、後続の読み取り操作で書き込まれたデータにアクセスできるようになります。
実装
次のコード サンプルは、修正された実装を示しています。
package main import ( "bufio" "fmt" "io/ioutil" "log" "os" "path/filepath" ) func main() { tmpFile, err := ioutil.TempFile("", fmt.Sprintf("%s-", filepath.Base(os.Args[0]))) if err != nil { log.Fatal("Could not create temporary file", err) } defer tmpFile.Close() fmt.Println("Created temp file: ", tmpFile.Name()) fmt.Println("Writing some data to the temp file") if _, err = tmpFile.WriteString("test data"); err != nil { log.Fatal("Unable to write to temporary file", err) } else { fmt.Println("Data should have been written") } fmt.Println("Trying to read the temp file now") // Seek the pointer to the beginning tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } if err = s.Err(); err != nil { log.Fatal("error reading temp file", err) } }
最適化中パフォーマンス
上記のソリューションで最適なパフォーマンスを得るには、一時ファイルの代わりに bytes.Buffer を使用することを検討してください。このバッファは、データの読み取りを容易にするために bufio.Reader に渡すことができます。
さらに、s.Scan() ループを ioutil.ReadAll() に置き換えて、すべてのデータをバイトに効率的に読み取ることができます。スライスします。
以上がGo で一時ファイルに書き込んだばかりのデータを読み取れないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?
