>  기사  >  백엔드 개발  >  Go에서 텍스트 파일의 내용을 읽는 방법은 무엇입니까?

Go에서 텍스트 파일의 내용을 읽는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-13 15:13:02413검색

How to Read the Contents of a Text File in Go?

Go에서 텍스트 파일을 읽는 방법

Go에서 텍스트 파일을 작업할 때 내용을 읽는 방법을 이해하는 것이 중요합니다. 그러나 "텍스트 파일을 읽는 방법? [중복]"이라는 질문을 통해 이 작업이 생각보다 더 복잡할 수 있음을 알 수 있습니다.

제공한 코드:

package main

import (
    "fmt"
    "os"
    "log"
)

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Print(file)
}

파일을 성공적으로 읽었지만 출력은 단지 파일 설명자(*os.File)의 포인터 값일 뿐입니다. 파일 내용을 실제로 얻으려면 다음과 같은 여러 기술 중 하나를 사용해야 합니다.

파일 내용을 메모리로 읽기

작은 파일의 경우 가장 간단한 접근 방식은 io/ioutil.ReadAll을 사용하여 로드하는 것입니다. 전체 파일을 메모리에 저장합니다.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    b, err := io.ReadAll(file)
    fmt.Print(b)
}

청크로 읽기

큰 파일의 경우 청크로 읽는 것이 메모리 효율적일 수 있습니다.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    buf := make([]byte, 32*1024)

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

        if n > 0 {
            fmt.Print(buf[:n])
        }

        if err == io.EOF {
            break
        }
        if err != nil {
            log.Printf("read %d bytes: %v", n, err)
            break
        }
    }
}

스캐너 사용

마지막으로 bufio 패키지를 사용하여 파일을 토큰으로 읽고 구분 기호(기본적으로 줄 바꿈)를 기반으로 진행하는 스캐너를 생성할 수 있습니다.

func main() {
    file, err := os.Open("file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)

    for scanner.Scan() {
        fmt.Println(scanner.Text())
        fmt.Println(scanner.Bytes())
    }
}

위 내용은 Go에서 텍스트 파일의 내용을 읽는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.