23년 7월 후반기 뉴스레터
환경 설정 파일 포맷을 뭘로 할까?
JSON? YAML? env?
하나의 라이브러리에서 다뤄볼 수 있는, yacl 한번 해보시는 건 어떤 가요?
고에서 스트림 처리하는 방법
사실 지금까지 고에서 슬라이스나 채널에 대해 스트림을 하는 라이브러리는 꾸준히 나왔고, 나오고 있습니다.
단점은 새로 익혀야 하는 것과 굳이 써야 한다는 점이죠.
이번에 새로 나온 개구리, 한번 어떠신가요?
koss-null/FuncFrog: Stream api (kind of) implementation for go, other useful functions and packages to use go in a functional way (github.com)
돌리고, 나누고, 더하고, 접고!
고에서 이미지 처리할 때, 어떤 라이브러리를 쓰시나요?
저도 최근에 썸네일 작업을 해줄 필요가 있어서 라이브러리를 찾았는데, bimg라는 친구가 괜찮아 보이더라고요!
h2non/bimg: Go package for fast high-level image processing powered by libvips C library (github.com)
go+nodejs
고와 노드에서 gRPC로 데이터를 주고받으려 한 적이 있으신 가요?
전 자랑스럽게도 nodejs에서 하기에 번거로워서 그냥 접고 C#으로 했던 기억이 있네요.
지금 당장 시도해 보실 분들은 다음 가이드를 한번 읽어 보는 건 어떨까요?
가비지 컬렉터 얼마나 알고 있어요?
기존에도 당연히 고의 메모리 구조나 GC의 동작에 대해서 서술한 아티클은 많았습니다.
거기에 더 떠서 1.21 현 시점 최신 기능까지 소개하는 이 글은 지금 고의 GC에 대해 시작할 많은 분들께 도움이 될 것이라 생각합니다!
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
Risor라는 고로 짜여진 언어가 올해 새로 추가되었습니다.
Risor는 범용 목적으로 쓸 수 있는 빠르고, 유저 친화적이며 싱글 바이너리로 빌드되는 특징을 가지고 있습니다.
고 언어의 빌트인 라이브러리도 내장되어 있고, 커스터마이징도 쉽다고 하니 한번 써보고 기여해 보시는 건 어떨까요?
risor-io/risor: A fast and flexible embedded scripting language for Go projects. (github.com)
친구비 적게 내는 방법
고 코드를 이용해 CPU 캐시를 효율적으로 사용할 수 있는 방법에 대한 아티클이 등장했습니다.
실제로 내부에 어셈블리나 캐시 동작 등을 깊게 파보는게 아니라 벤치마크를 통해 어느정도 파악하는 걸로 진행됩니다.
그래도 어느정도의 코드 변형이 얼마나 성능에 영향을 주는지 확인할 수 있는 좋은 글이라 생각됩니다.
Getting Friendly With CPU Caches (ardanlabs.com)
언어 스펙 커지는 소리
얼마 전에 min, max가 빌트인 함수로 들어간 걸 아실 겁니다.
그리고 Russ Cox님이 이번엔 for range에 대한 새로운 스펙을 제안했습니다.
그.. 뭐.. 제가 표현하기 좀 그러니 직접 보시죠.
proposal: spec: add range over int, range over func · Issue #61405 · golang/go (github.com)
벤치마크의 잘못된 습관
벤치마크 다들 잘 돌리고 계시나요?
고의 벤치마크는 매우 작성도 실행도 쉽고 편하게 되어 있죠.
하지만 쉽고 편하면 오남용되기 쉬운 법이죠.
어떤 걸 pitfall이라 평하고 있는지 한번 살펴볼까요?
Common pitfalls in Go benchmarking - Eli Bendersky's website (thegreenplace.net)
여전히 순환 참조가 걱정되십니까!?
패키지를 어떻게 분리할지 모르겠다고요!?
차라리 main 패키지에 다 몰아 쓴다고요!?
그럼 유지보수는 어떻게 하시려고 그러십니까?
사실 main 패키지에 몰아도 파일 별로 분리가 잘 되어 있고, 의존성이 잘 관리되어 있으면 문제없죠.
여전히 패키지 구조에 대해 제대로 개념을 잡지 못하셨다면 어려울 수 있는 순환 참조!
Goda를 통해 확인하고 고쳐보세요!
loov/goda: Go Dependency Analysis toolkit (github.com)
고 코드 분석할 일이 생겼나요?
하지만 AST를 보기엔 어렵나요?
그럼 이 라이브러리는 어떠신 가요?
제 입장에선 잘 모르겠습니다.
willfaught/forklift: Forklift provides a simple way to load Go packages (github.com)
고의 깊진 않지만, 그렇다고 모두가 알진 않는 점
고에 대해 얼마나 알고 있는지 궁금하지 않나요?
이 시리즈는 고의 기묘한 트릭들을 소개하는 시리즈입니다.
얼마나 많이 알고들 계실지 기대되는 군요, 흐흐..
Golang Quirks & Intermediate Tricks, Pt 1: Declarations, Control Flow, & Typesystem (eblog.fly.dev)
Golang Quirks & Tricks, Pt 2 (eblog.fly.dev)
go quirks & tricks 3 (eblog.fly.dev)
터미널 그림
매우 실험적이긴 한데, 터미널에 입력 받은 그림을 그려본다는 군요?
srlehn/termimg: draw images in terminals (github.com)
커스텀 HTTP 리퀘스트 객체
Oh? *http.Request를 일부만 챙겨서 가져오겠다는 생각은 솔직히 말해서 못 했습니다.
하지만 어디서 들어올지 알고 있고, 그걸 명시해 주기만 하는 걸로 구조체에 맞춰서 들어온다면?
충분히 코드 리딩에서 경쟁력을 가질 수 있지 않나 생각합니다.
RangelReale/inreq: InReq - Golang http request to struct (github.com)