상황 설명회사에서 MySQL로 DB를 바꾸면서 코드를 전반적으로 수정할 수 있는 기회가 있었다. 평소에 사소하지만 눈여겨 보고 있었던 리팩토링 희망사항(?)이 있었는데,바로 config에 입력된 수많은 db 테이블들을 go 코드에서 각각 객체로 만들기 위해 또 변수명으로 해당 이름을 재사용(!)한다는 점이다. 말보다는 코드로 보는게 설명이 편할 것 같아 냅다 예시 코드를 가져왔다. (그렇다 원래는 MongoDB를 사용했다.)// config.toml[SomeDB]collectionName1 = "collectionName1"collectionName2 = "collectionName2"collectionName3 = "collectionName3"// config.gotype SomeDB struct {..
Go 서버에서 mongoDB에 데이터를 넣을 때 추가할 수 있는 신기한 기능(?)을 리팩토링 코드 리뷰를 받으면서 알게되어 그 내용을 정리하여 글을 쓰고자 한다.리뷰받은 코드는 다음과 같다.types.DataToUpdateInMongo{ ... TotalTradingVolume: totalTradingVolume.String() ...} 여기서 TotalTradingVolume 엄청나게 큰 숫자 값(블록체인 서비스다보니 기본 단위가 10^18 이기 때문)이다. 이래저래 사칙연산도 필요하다 보니 decimal.Deciaml 타입인 totalTradingVolume을 변수로 계산을 마친 후, 이제 mongo db 저장을 위해 최종 구조체에 값을 저장하려고 하는 코드이다. mongo에 이..
회사 프로젝트에서 2가지 방법으로 http response를 읽고 decode 하고 있다는 걸 발견했다. 둘 다 제대로 서비스가 동작하고 있는데 내부 동작이 어떻게 다른지 차이점이 궁금해서 공부해보았다. json.Decoder, Decode, Unmarshal 그리고 io.ReadAll 을 중심으로 살펴볼 예정이다. 코드 비교 우선 코드부터 살펴보자. 두 코드 모두 client.Do()를 이용해 response(*http.Response 타입)를 가져온다. 차이점은 response body(io.ReadCloser 타입)를 읽고 원하는 go 변수에 값을 넣어주는 방법이다. if resp, err := client.Do(req); err != nil { return err } else if body, er..