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 중국어 웹사이트의 기타 관련 기사를 참조하세요!