Golang : 텍스트 파일을 읽는 방법?
이 질문에 이미 답변이 있습니다.
- 전체 파일을 문자열 변수 5 답변 으로 읽는 방법
"file.txt"를 읽고 Golang을 사용하여 내용을 변수에 넣으려고합니다. 내가 시도한 것입니다 ...
package main
import (
"fmt"
"os"
"log"
)
func main() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
fmt.Print(file)
}
파일이 성공적으로 읽히고 os.Open에서 반환하면 * os.File 유형이 반환됩니다.
무엇을 하려는지에 따라 다릅니다.
file, err := os.Open("file.txt")
fmt.print(file)
& {0xc082016240}을 출력하는 이유는 파일 *os.File콘텐츠가 아닌 파일 설명자 ( ) 의 포인터 값을 인쇄하기 때문 입니다. 파일 내용을 얻으려면 파일 READ설명자에서 할 수 있습니다.
모든 파일 내용 (바이트 단위)을 메모리로 읽으려면 ioutil.ReadAll
package main
import (
"fmt"
"io/ioutil"
"os"
"log"
)
func main() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
b, err := ioutil.ReadAll(file)
fmt.Print(b)
}
그러나 때로는 파일 크기가 크면 청크 단위로 읽는 것이 더 메모리 효율적일 수 있습니다 : buffer-size, 따라서 io.Reader.Readfrom 구현을 사용할 수 있습니다.*os.File
func main() {
file, err := os.Open("file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
buf := make([]byte, 32*1024) // define your buffer size here.
for {
n, err := file.Read(buf)
if n > 0 {
fmt.Print(buf[:n]) // your read buffer.
}
if err == io.EOF {
break
}
if err != nil {
log.Printf("read %d bytes: %v", n, err)
break
}
}
}
그렇지 않으면 표준 util 패키지를 사용할 수도 있습니다 : bufio, try Scanner. A Scanner는 tokens : separator에서 파일을 읽습니다.
기본적으로 scanner는 새 줄로 토큰을 진행합니다 (물론 scanner가 파일을 토큰 화하는 방법을 사용자 정의 할 수 있습니다 . 여기 에서 bufio test 에서 배우십시오 ).
package main
import (
"fmt"
"os"
"log"
"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() { // internally, it advances token based on sperator
fmt.Println(scanner.Text()) // token in unicode-char
fmt.Println(scanner.Bytes()) // token in bytes
}
}
마지막으로이 멋진 사이트 인 go-lang file cheatsheet 를 참조하고 싶습니다 . go-lang에서 파일 작업과 관련된 거의 모든 것을 포함하고 있습니다. 유용하게 사용되기를 바랍니다.
참고 URL : https://stackoverflow.com/questions/36111777/golang-how-to-read-a-text-file
'Programing' 카테고리의 다른 글
| 커밋없이 Github의 한 줄에 댓글을 달았나요? (0) | 2020.10.20 |
|---|---|
| C ++ 연속 통합을위한 buildbot 대 hudson / jenkins (0) | 2020.10.20 |
| 열거 형 사용 및 유지를위한 모범 사례 (0) | 2020.10.20 |
| Git : 저장소에서 자동 가져 오기? (0) | 2020.10.20 |
| 원격 프로 시저 호출과 웹 서비스의 차이점은 무엇입니까? (0) | 2020.10.20 |