Skip to content

Latest commit

 

History

History
127 lines (68 loc) · 11.3 KB

2020-06.md

File metadata and controls

127 lines (68 loc) · 11.3 KB

2020-06

목차

Go 새소식

VS Code의 Go 익스텐션은 지난 Go developer survey에서 무려 41%의 Go 개발자가 이를 사용한다는 답변을 얻었습니다. VS Code의 Go 익스텐션이 점점 유명해지고, 생태계가 확장됨에 따라 더 많은 유지보수와 지원이 필요하게 됐습니다. 이에따라 몇년 전 부터 Go 팀은 VS Code 팀과 함께 프로젝트 메인테이너들을 지원하고자 협업을 진행해왔고, 결과적으로 VS Code의 Go 익스텐션이 Go 프로젝트에 합류하게 되었습니다.

Go 개발자를 위한 패키지 정보, 학습 자료, 유스 케이스 큐레이팅 웹사이트인 pkg.go.dev가 오픈소스가 되었습니다. 코드의 원본 저장소는 go.googlesource.com/pkgsite에 위치해 있으며, 미러 버전은 github.com/golang/pkgsite에서 확인하실 수 있습니다.

Go 팀에서 새로운 제네릭 디자인 초안과 함께 제네릭 도입을 위한 다음 단계에 대한 글을 발표했습니다. 기존 디자인에서 contract 개념을 제거해 보다 이해하기 쉽고 간단하게 변경되었습니다. 새로운 디자인은 go2go playground에서 바로 체험해 보실 수 있습니다. 새로운 제네릭 디자인이 Go에서의 제네릭 부재로 인한 문제를 잘 해결하고, 큰 변경사항이 없다면 빠르게는 Go 1.17(2021년 8월 출시 예정)에 정식으로 도입될 수도 있습니다.

Go 릴리스 관련

Go 1.15 Beta 1이 릴리즈 되었습니다. Go 1.15 Beta 1 버전은 아래 커맨드를 통해 지금 바로 다운받을 수 있습니다. (Go 1.15 버전에 대한 자세한 내용은 지난 5월 뉴스레터를 통해 확인하실 수 있습니다.)

go get golang.org/dl/go1.15beta1

새로운 프로젝트 & 릴리스

Colly는 모든 종류의 crawler, scraper, spider를 구현할 수 있는 깔끔한 인터페이스를 제공합니다. Colly를 통해 웹 사이트에서 구조화 된 데이터를 쉽게 추출 할 수 있으며, 이를 데이터 마이닝, 프로세싱, 아카이빙과 같이 광범위한 응용 프로그램에 쉽게 적용하여 사용할 수 있습니다.

Go의 기본 내장 CPU 프로파일러는 프로파일링에 있어서 fgprof보다 훌륭하지만 CPU에 대한 정보만을 제공합니다. I/O 작업을 분석하기 위한 프로파일러 역시 Go에 포함돼 있지만 이를 CPU 프로파일러와 함께 통합해 볼 순 없었습니다. fgprof는 이러한 문제점을 해결하기 위해 등장한 프로파일러로 CPU 작업과 I/O 작업을 통합해 분석을 할 수 있도록 도와줍니다.

memplot은 Go로 작성된 작은 유틸리티 프로그램으로, 프로세스의 메모리 사용량을 시각화합니다. memplot은 프로세스의 메모리 사용량을 주기적으로 샘플링하여 이미지 파일 형태로 결과를 출력합니다. .eps, .jpg, .jpeg, .pdf, .png, .svg, .tex, .tif, tiff와 같이 다양한 포맷을 지원합니다.

Windows, Posix 터미널을 지원하는 상호작용 가능한 프롬프트 개발을 위한 라이브러리입니다. 쉽고 단순한 인터페이스와 잘 정리된 문서를 제공하고 있어 상호작용 가능한 프롬프트를 쉽게 개발할 수 있도록 도와줍니다.

튜토리얼 & 가이드

수많은 Go 예제 코드, 연습문제와 퀴즈를 모아둔 저장소 입니다. Go언어의 기초 문법부터 응용법까지 다양한 스킬을 익힐 수 있습니다.

Tucker님의 Go를 사용한 웹 프로그래밍 강의입니다. 유튜브에 무료로 공유돼 있는 영상과 함께 Go를 사용한 웹 프로그래밍의 기초를 닦을 수 있습니다.

많은 사람들이 새로운 팀에 합류하여 개발을 시작할 때 개발환경을 세팅하기 위해 많은 시간을 보내곤 합니다. 온보딩을 위한 문서가 준비된 곳도 있겠지만, 대부분은 없거나 지속적으로 업데이트되지 않곤 합니다. 이 글에서는 이러한 고충을 해결하기 위해 Docker 개발 팀에서 Go 개발환경을 컨테이너화 하여 관리하는 방법을 세 파트에 걸쳐 소개합니다.

Go의 인터페이스는 Java, C#에서의 인터페이스와 다르게 동작합니다. 다른 언어에서 인터페이스를 한 패키지에 모아두는 것은 쉽게 접할 수 있는 구조입니다. 하지만 Go에서 이러한 방법은 일반적이지 않고, 지양됩니다. 이 글에서는 인터페이스를 구현체를 제공하는 패키지가 아닌, 해당 구현체를 사용하는 패키지에서 정의해야하는 이유에 대해 코드 예시와 함께 설명합니다.

Cup<T>

새로 업데이트된 Go의 제네릭 디자인 초안을 간단한 코드와 함께 설명합니다. 글에 등장하는 모든 코드는 go2go playground 링크와 함께 공유돼 있어, 직접 실행해볼 수 있습니다.

기술글 & 경험담 & 개선기

Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.

Go의 빌드 과정 중 링커의 타임라인을 정리한 글입니다. 이 글은 Go 1.14를 기반으로 작성되었으며, Go 1.15에는 새로운 링커 탑재가 예정되어 있습니다.

Credits: unsplash.com

개발자가 되기 위해 하드웨어 엔지니어가 될 필요는 없지만, 어느정도의 하드웨어에 대한 이해는 알고리즘이나 자료구조를 설계할 때 큰 도움이 됩니다. 이 글에서는 최적화 문제 해결에 도움이 될 만한 CPU 캐시에 대한 개념을 Go 코드와 함께 설명합니다.

Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.

stringer는 fmt.Stringer 인터페이스를 구현하기 위한 메서드를 자동으로 생성해주는 도구입니다. 이 글에서는 stringer가 fmt.Stringer 인터페이스를 어떤 방식으로 효율적으로 구현하였는지 성능비교와 함께 설명합니다.

Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.

[]byte 타입에서 string 타입으로의 변환은 힙 할당과 데이터 복사를 일으킵니다. Go는 이러한 오버헤드를 줄이기 위해 런타임과 컴파일 타임에서 최적화 작업을 합니다. 이 글에서는 각각의 최적화 방법을 설명합니다.

실제로 겪었던 성능 이슈를 Go의 pprof를 통해 프로파일링하여 문제를 해결한 경험에 대한 글입니다. 프로파일링이 무엇인지에 대한 간단한 설명과 실제 프로파일링을 통한 문제 해결 과정, 경험을 통해 얻은 팁을 공유하고 있습니다.

escape analysis with gopher

컴파일러의 최적화 단계에서 Escape Analysis는 포인터의 동적 스코프를 알아내기 위한 방법입니다. Go에서는 Escape Analysis를 통해 객체를 힙과 스택 중 알맞은 곳에 할당합니다. 이 글에서는 Escape Analysis가 무엇인지 알아보고, 필요한 이유와 어떻게 동작하는지를 설명합니다.

Go 컴파일러의 SSA 백엔드는 컴파일 단계에서의 디버깅 정보를 HTML 파일 형태로 출력할 수 있는 기능을 제공합니다. 이 글에서는 함수와 메서드의 SSA 그래프를 HTML 파일 형태로 출력하는 방법에 대해 설명합니다.

책 소개

O’REILLY의 검증된 개발 입문서 시리즈인 Head First의 Go언어 버전입니다. 올해 3월 한국어로 번역 출간됐으며 평점 9.7을 기록하고 있는 훌륭한 Go언어 입문서입니다.

DigitalOcean에서 무료 배포한 eBook으로 Go를 사용하여 프로그램을 작성하는 방법을 소개합니다. 이 책은 DigitalOcean CommunityHow To Code in Go을 기반으로 하고 있으며, EPUB, PDF 형태로 다운 받으실 수 있습니다.