HOWTO · Go

Go에서 파일을 문자열로 읽기

ioutil.ReadFile()은 Go에서 파일을 읽기 위한 ioutil 라이브러리의 일부입니다.

이 페이지의 내용

GoLang은 많은 파일 작업 도구를 제공하며 그 중 하나는 파일을 문자열로 읽는 방법입니다. 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는 문자열을 연결합니다. 데이터는 파일에서 한 장씩 읽은 다음 함께 인쇄됩니다.