この記事では、Golang でファイルを読み取る方法について説明します。これらのファイルを処理するには次のパッケージを使用します。
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()
関数について説明します。 状況:
ReadFile(filename string) ([]byte, error)
os.ReadFile(fileName)
メソッド 内部 ReadFile 関数は次のように実装されます:
func ReadFile(filename string) ([]byte, error) { return os.ReadFile(filename) }
さて、プログラムに戻りましょう:
ioutil.ReadFile("readthisfile.txt")
byteArray とエラーを返します。 byteArray を「content」変数に保存し、エラーを「err」変数に保存します。 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!
スキャナ スキャナは、改行で区切られたテキスト行で構成されるファイルなどのデータを読み取るための便利なインターフェイスを提供します。マーカーを介してデータを読み取ります。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 になります。 プログラムを実行すると、結果は次のようになります:
ファイルを単語ごとに読み取る:
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 サイトの他の関連記事を参照してください。