Golang 알아두면 좋은 Tip - 1
Go 언어를 다루는 개발자들을 위한 깊이 있는 팁을 공유합니다. 특정 패키지의 사용법, 코딩 노하우, 실수할 수 있는 부분들에 대해서 간결하게 정리합니다.
Go언어로 개발하면서 사용할 수 있는 유용한 정보와 기법들을 소개한다.
time.Time의 시간을 변경할 때 결과 값을 대입하여 갱신한다
time.Time 타입의 변수 t가 있을 때, 한 시간 이후의 시간을 구하려면 t.Add(time.Hour)을 호출하면 된다. 이때 t의 시간은 Add에 의해서 변경되지 않으며 Add의 return값을 t에 다시 대입하는 것으로 한 시간이 추가된 시간값을 유지할 수 있다. Add의 결과를 별도의 변수에 할당하거나 갱신이 목적이 아닌 경우에는 해당하지 않는다.
map은 race condition(동시 접근 가능성)을 유발할 수 있으며, 고루틴에 의해 race condition을 배제하기 위해서 mutex를 사용하거나 sync.Map을 사용한다
map은 순서를 보장하지 않는다
Go언어의 기본 key:value 자료 형식인 map은 java의 HashMap과 유사하다. java에서는 LinkedHashMap 등을 사용하여 입력한 순서를 보장하고 keys를 순차적으로 사용할 수 있지만 Go언어 기본 map에서는 이를 지원하지 않는다.
len(nil)은 panic이 발생하지 않는다
초기화 되지 않았거나(길이가 0), 배열이 nil인 경우 len 함수는 0을 리턴한다. 별도로 len함수에 전달할 변수에 대해 요소가 있는지 없는지 확인할 때 nil 체크를 하지 않아도 된다.
다음 로직 실행까지 지연을 주고 싶으면 time.Sleep을 사용, 특정 Duration마다 반복 실행할 경우 Ticker를 사용
고루틴은 시작시간이 Sequential(순차적) 하지 않다
시간 포맷 파싱할 때 Location 정보를 주지 않으면 time Location은 UTC가 됨
map의 value type이 nil-able 이 아닌 경우, key가 없는 경우에도 key를 추가하며 값을 연산할 수 있음