Go 言語でファイルを読み取るにはどうすればよいですか?さまざまな手法の簡単な分析
この記事では、Golang でファイルを読み取る方法について説明します。これらのファイルを処理するには次のパッケージを使用します。
- os パッケージは、操作レベルの操作を実行するためのプラットフォームに依存しないインターフェイスを提供します。
- IOutil このパッケージは、内部実装についてあまり知らなくてもファイルを操作できる使いやすいユーティリティ関数を提供します。
- bufio パッケージはバッファリングされた IO を実装しており、入出力操作のパフォーマンスとスループットの向上に役立ちます。
-
log パッケージは、単純なログ記録パッケージを実装します。これをプログラム全体で使用します。プログラムではログパッケージの
Fatal()
関数を使用します。
ファイル全体の読み取り
ファイル全体を一度に簡単に読み取り、変数に保存できます。ただし、大きなファイルに対してこれを行うべきではないことに注意してください。 ioutil.ReadFile()
関数を使用してファイルを読み取り、ファイルの内容を変数に保存します。
まず、プログラムと同じディレクトリにファイルを保存しましょう。したがって、フォルダー構造は次のようになります。
___ | |_ _ _ _ ilovego.txt | |_ _ _ _ main.go
main.go
関数に次のように記述します:
package main import ( "fmt" "io/ioutil" "log" ) func main() { content, err := ioutil.ReadFile("ilovego.txt") if err != nil { log.Fatal(err) } fmt.Println(string(content)) }
ただし、まず ReadFile()
関数について説明します。 状況:
- 定義: メソッド宣言 func
ReadFile(filename string) ([]byte, error)
- 関数: 読み取りパスが関数パラメータ ファイルに渡され、ファイルの内容を返します。内部的に使用される
os.ReadFile(fileName)
メソッド - Returns: ファイルの内容とエラーをバイト配列で返します。呼び出しが成功すると、err == nil
内部 ReadFile 関数は次のように実装されます:
func ReadFile(filename string) ([]byte, error) { return os.ReadFile(filename) }
さて、プログラムに戻りましょう:
ioutil.ReadFile("readthisfile.txt")
byteArray とエラーを返します。 byteArray を「content」変数に保存し、エラーを「err」変数に保存します。- 次に、if 条件を設定します。err 値が nil でない場合は、
log.Fatal()
関数を使用してエラー err を出力します。Fatal()
関数は、os.Exit(1)
を呼び出すPrint()
関数と同等であることに注意してください。 - 最後に、
fmt.Println()
関数を使用してファイルの内容を印刷します。content
変数はバイト配列であり、文字列に変換する必要があるため、単純に出力することはできません。string(content)
次に、新しい ilovego.txt
ファイルを作成し、次の内容を書き込みます:
I Love Golang, This is One of the Best Languages on the World!
最後に、上記のコードを実行すると、次の出力が表示されます:
$ go run main.go I Love Golang, This is One of the Best Languages on the World!
Press line読み取り
スキャナ スキャナは、改行で区切られたテキスト行で構成されるファイルなどのデータを読み取るための便利なインターフェイスを提供します。マーカーを介してデータを読み取ります。Split
関数はマーカーを定義します。デフォルトでは、この関数はデータを行に分割し、行の端を削除します。
package main import ( "fmt" // "io/ioutil" "bufio" "log" "os" ) func main() { // opening the file using Open function f, err := os.Open("ilovego.txt") if err != nil { log.Fatal(err) } defer f.Close() // create a scanner for the file scanner := bufio.NewScanner(f) // loop through the scanner until it return fasle for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { log.Fatal(err) } }
os.Open()
パラメータで渡されたファイルを開きます。ファイルを開くときにエラーが発生した場合は、同じエラーが返されます。それ以外の場合、エラーは nil になります。- 次に、スキャナを使用してファイルを読み取り、ファイルの内容の終わりまで 1 行ずつスキャンします。
- 最後に、ファイルを閉じます。
プログラムを実行すると、結果は次のようになります:
単語ごとに読み取ります
ファイルを単語ごとに読み取る:
package main import ( "bufio" "fmt" "os" ) func main() { f, err := os.Open("ilovego.txt") if err != nil { fmt.Println(err) } defer f.Close() scanner := bufio.NewScanner(f) scanner.Split(bufio.ScanWords) for scanner.Scan() { fmt.Println(scanner.Text()) } if err := scanner.Err(); err != nil { fmt.Println(err) } }
コードを実行する:
$ go run main.go I Love Golang, This is One of the Best Languages on the World!
ファイルをチャンクで読み取る
ファイル全体を読み取ることもできます。 at Once これは簡単な方法のように思えますが、メモリ管理の観点からプログラムを最適化する必要がある場合があります。 Golang は、ファイル全体を読み取るのではなく、あるいは 1 行ずつ読み取るのではなく、ファイルを分割して読み取る方法を提供します。行のサイズが大きすぎると、行ごとの読み取りも非効率になる可能性があるためです。
package main import ( "bufio" "fmt" "io" "log" "os" ) func main() { f, err := os.Open("ilovego.txt") if err != nil { log.Fatal(err) } defer f.Close() reader := bufio.NewReader(f) buf := make([]byte, 16) for { // reading a file upto buffer n, err := reader.Read(buf) if err != nil { if err != io.EOF { log.Fatal(err) } break } fmt.Print(string(buf[0:n])) } fmt.Println() }
バイナリ読み取り
hex
パッケージは 16 進数のエンコードとデコードを実装します。
package main import ( "bufio" "encoding/hex" "fmt" "io" "log" "os" ) func main() { f, err := os.Open("sid.jpg") if err != nil { log.Fatal(err) } defer f.Close() reader := bufio.NewReader(f) buf := make([]byte, 256) for { _, err := reader.Read(buf) if err != nil { if err != io.EOF { fmt.Println(err) } break } fmt.Printf("%s", hex.Dump(buf)) } }
总结
本文介绍了 Go 语言读取文件的几种方式,ioutil.ReadFile
函数将整个文件读成一个字符串。这个函数很方便,但不应该用于非常大的文件。希望能对你有所帮助!
推荐学习:Golang教程
以上が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 Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

マルチプロセスのログライティングの並行性セキュリティの問題を効率的に処理します。複数のプロセスが同じログファイルを同時に書き込みます。並行性が安全で効率的であることを確認する方法は?これは...
