3장.
앗...? DB가 없는 환경에서 동작하게 만들라고...!??!
처음 go를 쓰면서 커피 어드민 툴을 만들 때 제가 들었던 말이예요 .
지금 남는 서버가 있긴 한데, 그 서버에 있는 DB는 사용하면 안 되는게 서버를 사용할 수 있는 조건 이였어요.
그래서 FileIO를 통하여 프로그램을 작성하기로 결심했어요.
파일 io는 2가지 정도의 조건이 있을 것 같아요.
1. CSV(comma seperate version )
2. normal version.
자, 이 두 가지를 사용하기 앞서서,
앞으로 우리가 사용할 모델을 정의해 줄거예요.
앞에서 이야기 한 조건들을 생각해 보면,
"개발자 말고 다른 직군(디자이너, 기획자)도 같이 먹을 수 있게 해주세요"
"하루 이틀은 제가 빠질 수 있도록 조정하고 싶어요"
이 말을 바탕으로 생각해보면,
이름, 직군, 이메일, 참가여부
정도의 정보를 갖는 모델이 필요해요. (이메일은 결과를 메일로 받아야하기 때문이예요!)
이를 바탕으로 모델을 만들면 다음처럼 될 수 있을 것 같아요.
type Colleague struct {
Name string
Position string
Email string `gorm:"PRIMARY_KEY"`
Attend string
}
여기서 email에서 gorm을 사용했는데요, golang에서 많이 사용하는 orm이예요 .
이거에 대해서도 하나의 포스팅으로 분리할게요!
csv파일을 컨트롤 하기 위해서는 encoding/csv 패키지의 기본 라이브러리를 사용 할거예요.
백문이 문여일견, 먼저 읽어들이는 코드를 보고 갈게요.
func getColleagueInfoFromCsv(filename string) []Colleague {
// 파일 오픈 !
file, _ := os.Open(filename)
// csv reader 생성
rdr := csv.NewReader(bufio.NewReader(file))
// csv 내용 모두 읽기
rows, _ := rdr.ReadAll()
colleagues := []Colleague{}
var temp Colleague
// 행,열 읽기
for i := range rows {
temp.Email = strings.TrimSpace(rows[i][0])
temp.Name = strings.TrimSpace(rows[i][1])
temp.Position = strings.TrimSpace(rows[i][2])
temp.Attend = strings.TrimSpace(rows[i][3])
colleagues = append(colleagues, temp) // 1
}
return colleagues
}
나 아직 여기에서 어떻게 최적화를 해야할지 모르겠어요
// 1에 있는 부분도 최적화가 가능할 것 같은데,
일단은 돌아가는 코드를 만들고, 리팩토링 하는 리뷰도 한번 만들게요.
---- 여기부터는 작성중인 문서입니다. ----
'Web > golang' 카테고리의 다른 글
golang을 이용한 초 간단 restful api 만들기 (2) (0) | 2019.01.06 |
---|---|
golang을 이용한 초 간단 restful api 만들기 (1) (0) | 2019.01.06 |