Go 팀이 제네릭을 사용하여 그래프, 맵, 리스트 등을 구현한 예시 코드입니다.
제네릭 개발의 핵심 멤버인 Ian Lance Taylor가 제네릭 디자인에 대한 앞으로의 진행 방향을 공유했습니다. 타입 파라미터에서의 type
키워드는 제거 되었고, 제네릭 표기법으론 대괄호를 사용하기로 결정했습니다. 더 자세한 내용은 위 링크에서 확인하실 수 있습니다.
Go 1.15가 출시 되었습니다. 이번 릴리즈에는 링커에 대한 많은 개선과 높은 코어 수에서 작은 개체의 할당 개선, X.509 CommonName에 대한 지원 중단이 포함돼 있습니다. 또한, GOPROXY는 이제 오류를 반환하는 프록시를 건너뛸 수 있으며, 타임존 데이터베이스를 프로그램에 포함시킬 수 있도록 하는 time/tzdata 패키지가 추가되었습니다.
Golang으로 NFSv3 프로토콜을 구현하여 네트워크 파일 서버 프로젝트 입니다.
Reddit API를 쉽게 사용할 수 있도록 만든 비공식 클라이언트 라이브러리 입니다.
HTML을 Markdown으로 변환하는 프로젝트의 v1.2.0가 릴리즈 되었습니다.
github.com/pkg/errors
, errors
패키지를 쉽게 대체할 수 있고, errors.Is()
를 통해 크로스 네트워크 에러 처리를 가능케 하는 라이브러리 입니다. 이 외에도 분산 환경에서 에러를 처리하기 위한 강력한 기능을 포함하고 있습니다.
OSM(Open Service Meshs)는 쿠버네티스 위에서 동작하는, 가볍고 확장성있는 서비스 메쉬 프로젝트 입니다. CNCF Envoy를 사용하여 Service Mesh Interface를 구현했습니다.
Task는 태스크 러너 / 빌드 툴로 GNU Make와 같은 도구보다 쉽고, 단순하게 사용할 수 있습니다. 자세한 사용법은 프로젝트 사이트에서 확인하실 수 있습니다.
askgit을 SQL로 깃 저장소에 쿼리할 수 있도록 만들 커맨드라인 툴입니다. 이 툴을 사용하면 다음과 같은 작업을 할 수 있습니다.
-- user@email.com가 커밋을 몇 개 했을까?
SELECT count(*) FROM commits WHERE author_email = 'user@email.com'
더 자세한 내용은 위 링크와 관련 이 글에서 확인할 수 있습니다.
수많은 기능을 포함하고 있는 ORM 라이브러리인 gorm의 v2.0.0이 릴리즈 됐습니다.
TCP/UDP 패킷의 헤더의 정보를 이용하여, 호스트간의 이동경로를 확인할 수 있도록 구현한 사례입니다.
Tiny Go가 LLVM을 만나 어떻게 쓰이는지 영상과 스크립트를 통해 확인 할 수 있습니다.
Golang에서 heap.Interface 패키지를 사용하여 힙 데이터 구조를 구현하고, 벤치마크를 하는 과정을 살펴봅니다.
고차함수 사용, 몽키 패칭, 인터페이스 대치, 인터페이스 임베딩, net/http/httptest
사용을 통한 Go의 다섯 가지 모킹 테크닉을 알아봅니다.
이 글에서는 Go 공식 블로그의 지난 모듈 호환성에 대한 글의 컨셉을 간단한 예시와 함께 살펴봅니다.
Golang으로 OrderedMap 데이터 구조를 구현하는 과정을 보여주며, 제네릭이 얼마나 강력한지 확인 할 수 있습니다.
dep에서 Go Modules로 마이그레이션 경험에서 직면했던 어려움과 극복과정을 확인 할 수 있습니다.
Fraugster사에서 Apache Parquet 파일을 이용하여 fraugster/parquet-go를 만든 이야기입니다.
중국인들에게 한국상품을 팔기위한 사업에서 국내 위챗페이 결제 대행사(이하 PG)와 연동하며 EUC-KR 인코딩 경험 사례입니다.
Golang에서 http.DefaultServerMux 사용에 대한 짧지만 꼭 필요한 내용입니다.
Google에서의 Go를 사용하는 새로운 사례들이 공유됐습니다. 구글의 핵심 데이터 팀, 크롬, 파이어베이스에서 각각 Go가 어떻게 사용되고 있는지 설명합니다.
Go로 짜여진 CockroachDB가 의존성 관리를 위해 사용하던 dep을 Go Modules를 사용도록 마이그레이션한 경험을 공유합니다. 큰 규모의 프로젝트가 Go Modules로 마이그레이션 하는 과정과 그 결과를 이 글에서 확인하실 수 있습니다.
Go에서 인터페이스는 타입을 가리키는 포인터와 값을 가리키는 포인터로 이루어져 있습니다. 즉, 일반적인 상황에서 인터페이스의 값은 힙에 할당돼야 함을 의미하고 이는 GC 오버헤드로 이어집니다. 이 글에서는 Go 1.15의 런타임 개선사항 중 하나인, 작은 크기의 int를 인터페이스로 변환하는 과정에서 어떻게 힙 할당을 제거했는지에 대해 설명합니다.
Go는 채널, 뮤텍스와 같은 메모리 동기화 메커니즘을 제공합니다. 그와 동시에 성능을 더 향상시키기 위한 원자적 연산(Atomic Operation) 기능도 atomic
패키지를 통해 제공합니다. 이 글에서는 sync
패키지의 뮤텍스와 atomic
패키지를 간단한 예시와 벤치마크 결과를 통해 비교합니다.
Go에서 몇몇의 내장 함수는 make
와 같이 실질적인 구현체가 존재하지만, len
, cap
과 같은 다른 몇몇의 함수들은 실질적인 구현체 없이 컴파일러에 의해 관리됩니다. 이 글에서는 Go가 이러한 내장 함수들을 최적화한 방법에 대해 알아봅니다.
thetechnews.com에 소개된 Golang으로 개발시 필수적이며 활용도 높은 5가지 도구에 대한 글입니다.