go의 csv 라이브러리를 이용해보자
준비
go의 csv는 file을 먼저 지정해주고 시작해야한다.
1
2
3
4
| file, err := os.Create("test.csv")
if err != nil {
fmt.Fatalln(err)
}
|
읽기
1
2
3
4
5
6
7
8
9
10
| r := csv.NewReader(file)
rows, err := r.ReadAll()
if err != nil {
log.Fatalln(err)
}
for _, row := range rows {
fmt.Println(row)
}
|
writer는 .Flush()
를 이용해서 사용이 끝나면 반환해줘야하지만, reader는 필요없다.
쓰기
1
2
3
4
5
6
7
8
| w := csv.NewWriter(file)
defer w.Flush() // 사용이 종료되면 release 시켜주는게 메모리 건강에 좋다ㅎ
headers := []string{"Link", "Title", "Location", "Salary", "Summary"}
err = w.Write(headers)
if err != nil {
fmt.Fatalln(err)
}
|
Write는 error를 반환해주니까 error 체크를 꼭 해주자.
go의 기본 csv 라이브러리는 GoRoutine을 지원하지 않는다;;;;
그래서 write가 많은 경우에 속도를 향상시키려면 다음과 같은 방법을 이용하자.
- GoRoutine을 지원하는 csv 라이브러리를 찾아서 쓴다ㅎ
- WriteAll을 이용해서 한번에 쓰는 쪽으로 간다.
Write마다 딜레이를 걸어주는건데…그럴거면 굳이…