Go 블로그에 다음과 같은 글이 올라왔다.

https://blog.golang.org/vscode-go

 

The VS Code Go extension joins the Go project - The Go Blog

The Go team 9 June 2020 When the Go project began, “an overarching goal was that Go do more to help the working programmer by enabling tooling, automating mundane tasks such as code formatting, and removing obstacles to working on large code bases” (Go

blog.golang.org

 

요약하자면 Go를 위한 VS Code Extension이 공식적으로 Go Project에 합류했다는 소식이다.

VS Code 블로그에도 같은 날 같은 내용의 포스트가 등록되었다.

 

2019년 조사에 의하면 Go 개발자 중에서 41% 가량이 VS Code에서 Go Extension을 사용해 개발을 하고 있다고 한다. 비공식적으로 VS Code 팀과 Go 팀이 협업을 통해 VS Code의 Go Extension개발을 지원해 왔지만, Go에 있어 VS Code의 위상이 무시하지 못할 수준으로 상승함에 따라 Go 팀에서 더 적극적인 개입(?)이 필요하다고 판단한 것 같다.

 

나 또한 최근까지 VS Code를 주력으로 사용했지만 유독 Go Extension에서 잦은 hang과 정의로 이동(Go to definition)과 같은 기능은 사용할 수 없을 정도로 너무 느려서 결국 Goland로 옮겨갔다. 언제든 성능이 좋아지면 다시 VS Code로 돌아올 요량으로 관련 소식을 모니터링하고 있었는데 매우 반가운 소식이 아닐 수 없다.

 

Go를 위한 VS Code Extension이 공식 Go Project가 되면 무엇이 바뀔까?

대표적으로 다음의 두 가지가 변경된다.

 

  1. 퍼블리셔가 "Microsoft"에서 "Google의 Go 팀"으로 변경
  2. Extension의 리포지토리가 https://github.com/golang/vscode-go 프로젝트로 이동

6/29일 현재 이미 VS Code Go Extension은 "Go Team at Google"로 퍼블리셔가 변경되었고 리포지토리도 변경되었다.

또한 VS Code를 다시 열어보았는데 "Go to definition" 기능은 초기 인덱싱을 제외하고는 즉시 반응하도록 개선되었다.(이전에 개선되었는지 Go 팀으로 변경되면서 개선되었는지는 자세히 확인하지 못했음)

 

이제 다시 VS Code를 주력 IDE로 사용해도 될 것 같다는 생각이 든다.

 

'programming > golang' 카테고리의 다른 글

Go Generic에 대한 소식  (0) 2020.06.28

이 글을 읽는 분이라면 이미 Generic Programming(일반화 프로그래밍)에 대해 들어보았을 것이다. 대표적으로 C++의 템플릿 프로그래밍이 있고 C#, Java와 같은 오래된 언어뿐만 아니라 Swift, Kotlin등 Modern Language에서도 지원한다.

그러나 아직까지 Go에서는 Generic을 지원하지 않는데, 이유는Go의 탄생 배경과 무관하지 않은 것 같다(C++을 싫어해서 만든 언어인데 Generic을 추가하면 언어가 복잡해지는 것을 피하기 힘들다).

 

그럼에도 불구하고 대부분의 Go 프로그래머는 언젠가 Go에서 Generic을 지원하게 될 것이라 기대하고 있을 것이다. Generic에 대한 논의는 2009년 11월 10일 처음 Go가 발표되었을 때부터 벌써 시작된 것 같다. 그 이후에도 프로그래머들은 계속해서 Generic에 대한 필요성을 요구해왔고, 나 또한 처음 Go 1.11을 접한 이후로 매번 새로운 버전이 릴리즈될 때마다 Generic에 대한 기대를 버리지 않고 있다.

 

그렇다면 Generic은 왜 필요할까? 왜 Go 프로그래머는 간절하게 Generic을 원할까?

 

2019년 7월 31일 Go 블로그에 Ian Lance Tayler(Golang 팀 멤버)의 "Why Generics"란 포스트가 등록되었다. 해당 포스트는 GopherCon 2019 에서 저자가 발표한 "Generics in Go"의 블로그 버전으로, 요약하면 다음과 같은 내용이 담겨 있다.

  • Go에 Generic이 추가된다는 건 어떤 의미인가?
  • 왜 Generic을 추가해야할까?
  • Go에 추가되는 Generic의 초안 디자인

해당 글에서 Ian이 강조하는 것은 Go의 단순함과 명확함을 손상하지 않고 Generic을 가져오는 것이다. 그럼에도 불구하고 해당 글에서 제안한 초안 디자인은 다른 언어의 Generic보다 결코 단순하고 명확하지 않은 모습을 보여 준다. 오히려 Go의 제한적인 문법 특성 때문인지 부가적인 문법(Contract, Ordered...)이 추가되어 해당 디자인이 그대로 확정되지 않기를 바라는 마음이 들 정도이다.

 

다행히도 최근 글인 "The Next Step for Generics"에서 업데이트된 초안 디자인에는 Contract 컨셉이 제외되었다는 언급이 있었다. 또한 간단히 테스트해 볼 수 있도록 실험도구인 translation 도구도 제공하는데 go2goplay 에서도 테스트해 볼 수 있다.

 

go2goplay 예제코드는 다음과 같다.

package main

import (
	"fmt"
)

func Print(type T)(s []T) {
	for _, v := range s {
		fmt.Print(v)
	}
}

func main() {
	Print([]string{"Hello, ", "playground\n"})
}

 

이대로만 나와줘도 좋을 것 같은데, "The Next Step for Generics"에서는 Go 커뮤니티의 피드백을 받아 초안 디자인에 큰 변화가 필요하지 않고 공식 언어 변경 제안도 무사히 통과했을 때를 가정하면, 결국 최대한 낙관적으로 예측해도 2021년 8월 Go 1.17 릴리즈에나 Generic이 정식으로 포함될 것 같다고 한다.

 

아직은 조금 더 기다려야 할 것 같다.

'programming > golang' 카테고리의 다른 글

Go 팀에서 공식적으로 VS Code Go Extension을 지원  (0) 2020.06.29

+ Recent posts