Go でファイルを文字列に読み込む

Musfirah Waseem 2023年6月20日
  1. Go で ioutil.ReadFile() メソッドを使用する
  2. Go で File.Read() メソッドを使用する
  3. Go で buf.ReadFrom() メソッドを使用する
  4. Go で strings.Builder メソッドを使用する
Go でファイルを文字列に読み込む

GoLang には多くの ファイル操作 ツールが用意されており、その 1つがファイルを文字列に読み込む方法です。 ioutil.ReadFile()File.Read()buf.ReadFrom()、および strings.Builder は、ファイルの内容を効率的に 弦。

Go で ioutil.ReadFile() メソッドを使用する

package main

import
(
    "fmt"

    "io/ioutil"
)

func main() {

    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("File.txt", inputData, 0777)

    Data, err := ioutil.ReadFile("File.txt")

    if err != nil {

        fmt.Println(err)
    }

    fmt.Print(string(Data))

}

出力:

Hello, World!

上記のコードにより、新しいファイルを作成してデータを書き込むことができます。 作成されたファイルは、ioutil.ReadFile() メソッドを使用して読み取られます。

Go で File.Read() メソッドを使用する

package main

import (
    "fmt"

    "io/ioutil"

    "log"

    "os"

    "io"
)

func main() {

    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("file.txt", inputData, 0777)

    f, err := os.Open("file.txt")

    if err != nil {
        log.Fatalf("Error in reading file: %v", err)
    }

    defer f.Close()

    buf := make([]byte, 1024)

    for {
        n, err := f.Read(buf)

	if err == io.EOF {

		break
	}
	if err != nil {

		fmt.Println(err)

		continue
	}
	if n > 0 {

		fmt.Println(string(buf[:n]))
	}
    }
}

出力:

Hello, World!

上記のコードでは、ファイルを分割して読み込んでいます。 毎回読みたいバッファサイズを指定すると、len(buf)だけがメモリに割り当てられます。

ファイルは、反復ごとに分割されて読み取られます。 この方法は主に、ファイルの内容がメモリに完全に収まらない大きなファイルに使用されます。

Go で buf.ReadFrom() メソッドを使用する

package main

import (
  "fmt"

  "io/ioutil"

  "os"

  "bytes"

  "log"
)

func main() {
    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("File.txt", inputData, 0777)

   f, err := os.Open("File.txt")

   if err != nil{

     log.Fatal(err)
   }
   defer f.Close()

   buf := new(bytes.Buffer)

   buf.ReadFrom(f)

   data := buf.String()

   fmt.Print(data)

}

出力:

Hello, World!

上記のコードでは、EOF までファイルからデータを読み取り、それをバッファに追加する buf.ReadFrom() を使用しました。 バッファ サイズは必要に応じて増加します。

Go で strings.Builder メソッドを使用する

package main

import (
    "io/ioutil"

   "io"

   "os"

   "strings"
)

func main() {
    inputData := []byte("Hello, World!")

    err := ioutil.WriteFile("file.txt", inputData, 0777)

   f, err := os.Open("file.txt")

   if err != nil {

      panic(err)
   }

   defer f.Close()

   b := new(strings.Builder)

   io.Copy(b, f)

   print(b.String())
}

出力:

Hello, World!

上記のコードでは、strings.Builder で文字列を連結しています。 データは、ファイルから 1つずつ読み込まれ、まとめられて印刷されます。

著者: Musfirah Waseem
Musfirah Waseem avatar Musfirah Waseem avatar

Musfirah is a student of computer science from the best university in Pakistan. She has a knack for programming and everything related. She is a tech geek who loves to help people as much as possible.

LinkedIn

関連記事 - Go File

関連記事 - Go String