본문 바로가기

golang17

[TIL] golang http server에 timeout handler 추가하기 Golang 서버에 timeout을 적용할 방법을 찾다가 나온 내용을 정리해둔다. 방법 1: http server에 timeout 설정 server := &http.Server{ Handler: h, ReadTimeout: 3 * time.Minute, WriteTimeout: 3 * time.Minute, } ReadTimeout: body를 포함한 전체 request를 읽기 위한 timeout. Handler가 request body의 허용 가능한 deadline이나 upload rate에 대한 request 별 decision을 내리지 않기 때문에 ReadHeaderTimeout을 사용하는 것이 권고된다. ReadHeaderTimeout: header를 읽는데 허용된 시간. Header를 다 읽으면.. 2023. 12. 25.
[TIL] golang promauto metric register시 panic golang에서 prometheus metric을 등록할 때 ‘-’가 들어가면 panic이 나는 경우가 있었다. 물론 ‘-’를 ‘_’로 바꿔주면 되는 이슈였지만, 애초에 prometheus metric을 logging하지 못한다고 panic이 나는게 이상하다. panic이 아니라 error를 리턴하여 에러 핸들링 로직으로 처리할 수 있어야 한다. AS-IS prometheus의 promauto package를 사용해서 gauge를 만들어 주고 있었다. newGauge := promauto.NewGauge( prometheus.GaugeOpts{ Namespace: PrometheusNameSpace, Name: metricName, Help: "Metric for " + metricName + ".", .. 2023. 12. 21.
[TIL] golang buffer 복사 golang에서 buffer를 io.ReadSeeker 인터페이스로 복사해줄 일이 생겼다. buffer 내용은 이후에 읽고 수정하기 때문에 consume하면 안된다. 내부 데이터만 복사해서 넘겨줘야 했다. #fail 1: bytes로 reader 만들어주기 data := bytes.NewReader(rw.Buffer().Bytes()) bytes slice를 그대로 reader로 넘겨주었는데, 이 데이터를 수정하는 시점과 data를 읽는 시점에서 timing issue가 생겼다. data를 읽는 함수가 goroutine으로 async로 구현되어 있기 때문이다. Buffer의 bytes 설명을 보면 다음과 같이 적혀 있다. The slice aliases the buffer content at least .. 2023. 12. 21.
Go google style guides - decisions 이전에 했던 style guide보다는 좀 더 서술적이고 예시가 많은 문서이다. 참고 문서: https://google.github.io/styleguide/go/decisions Naming Underscore를 피하자. 다음 케이스만 예외로 둔다. *_test.go 안의 Test, Benchmark and Example function OS와 직접 통신하는 system library util, utility, common, helper와 같은 무의미한 패키지 이름을 피하자. Receiver 이름은 짧고, 축약어를 많이 사용하라. func (tray Tray) → func (t Tray) func (info *ResearchInfo) → func (ri *ResearchInfo) 상수 이름은 다른 이름.. 2023. 12. 9.