Go 언어 csv파일 읽어서 구조체로 반환해보기
오늘은 Go 언어로 외부의 csv파일을 읽어서 구조체로 반환하는 실습을 진행해보려 합니다.
구조체 준비
type testData struct{
code string
Title string
Description string
}
우선 데이터를 규칙적으로 넣을 구조체를 만들어줍니다.
var data []testData
여러 세트를 for문으로 반복해서 작업하기 위해서 구조체 타입으로 배열을 만듭니다.
데이터 준비
0,제목 1,설명 1
1,제목 2,설명 2
구조체 필드에 넣을 데이터를 모아둔 csv 파일을 만들어줍니다.
함수 준비
func readCSV(filename string)[]testData{
return data
}
구조체를 반환할 함수를 만들어야 합니다.
함수 구현
이제 함수를 구현해보려 합니다.
func readCSV(filename string)[]testData{
file, _ := os.Open(filename)
read := csv.NewReader(file)
read.FieldsPerRecord = -1
파일 이름을 인자로 받아서 os 패키지로 해당 csv파일을 열어줍니다.
var tmp event
data, _ := read.ReadAll()
for _, e := range data {
tmp.code = e[0]
tmp.Title = e[1]
tmp.Description = e[2]
data = append(data,tmp)
}
event 구조체 타입의 tmp 변수를 만들어서 for문으로 해당 임시 구조체 필드에 값을 넣어줍니다.
for문 한번 반복해서 임시 구조체 변수에 한 세트가 완성되면 구조체들의 배열에 append 하여 추가해줍니다.
file.Close()
return data
}
마지막에는 csv 파일을 열어준 것을 반드시 닫아주고, 만들어둔 구조체 타입의 배열을 반환합니다.
핸들러 등록
func httpHandler(handler http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
readCSV("./eventDB.csv")
handler.ServeHTTP(w, r)
})
}
서버에서 사용하려면 핸들러에 등록해서 위와 같이 사용할 수 있습니다.
위는 eventDB.csv 파일을 읽어오는 예시입니다.
이렇게 코드를 작성하고, 어제 실습한 api서버와 결합하면 csv 파일에서 읽어와서 json 형식으로 반환해주는 것도 작성할 수 있습니다.
Written on November 8, 2018