자바스크립트를 활성화 해주세요

d052 Windows에서 Golang 개발환경 설정 최단설정 (REPL driven development)

 ·  ☕ 3 min read

d052_vscode_go_template.png

계기

go와 python은 linux기반의 환경에서 개발하자면, 친숙해야 하는 언어입니다. 팀에서 다루어야 하는 프로젝트의 필요에 따라서, 적절한 언어를 선택해 진행합니다. 언어는 시스템에 적절한 것을 선택하지, 팀이 보유하고 있는 skillset에 맞추지 않습니다. nodejs도, 거침없이 선택합니다. 설정환경은 윈도우즈. 최단 설정방법을 팀에 공유하고 있는데, 더 나은 방법이 있으면 공유해 업데이트 하곤 합니다.

개론

  • golang은 scoop으로 설치합니다. 버전선택에 고민하지 않습니다.
  • GOROOT는 %USERPROFILE%\scoop\apps\go\current\bin입니다. 대게는 Path에 go.exe가 걸려있으면 필요없지만, goland에서 사용합니다.
  • GOPATH는 무조건 %USERPROFILE%\go 입니다.
  • 프로젝트 디렉토리 구조는 https://github.com/golang-standards/project-layout 를 따릅니다.
  • script는 powershell(또는 pwsh)을 사용합니다.
  • IDE는 vscode와 goland 둘 다 사용합니다.
  • go module? 사용합니다.

시작해 볼까요. 우선 go를 설치합니다.

install golang (windows)

scoop으로 go설치하고, gopath를 설치합니다.

scoop install go
New-Item -ItemType "directory" -Path $((Get-Item env:userprofile).value + "\go")
mkdir %USERPROFILE%\go\src
mkdir %USERPROFILE%\go\bin
mkdir %USERPROFILE%\go\pkg

New-Item -Path 'Registry::HKEY_CURRENT_USER\Environment' -Name GOPATH -Value $((Get-Item env:userprofile).value + "\go")
Get-ChildItem env:gopath
$oldpath = (Get-ItemProperty -Path 'Registry::HKEY_CURRENT_USER\Environment' -Name PATH).path
$newpath = $($oldpath;(get-item env:userprofile).value + "\go\bin")
Set-ItemProperty -Path 'Registry::HKEY_CURRENT_USER\Environment' -Name PATH -Value $newPath

vscode setting

vscode는 이미 설치가 되어있겠지만 없으면 scoop으로 설치하여도 됩니다. 저는 일반버전과 preview 버전이 portable로, 두개가 설치되어 있습니다.

extension은 네, 가장 많이 쓰이는 go extension 그것을 설치합니다. 설치하고, notification에 설치를 추천하는 내용을 따라서 설치하면 됩니다. 또는 수동으로 설치할 수도 있습니다. 수동설치는 다음과 같습니다.

go get -v github.com/uudashr/gopkgs/cmd/gopkgs
go get -v github.com/nsf/gocode
go get -v github.com/ramya-rao-a/go-outline
go get -v github.com/acroca/go-symbols
go get -v golang.org/x/tools/cmd/guru
go get -v golang.org/x/tools/cmd/gorename
go get -v github.com/rogpeppe/godef
go get -v sourcegraph.com/sqs/goreturns
go get -v github.com/golang/lint/golint
go get -v github.com/derekparker/delve/cmd/dlv
go get -v golang.org/x/tools/gopls
go get -u github.com/sourcegraph/go-langserver

vscode를 시험해 봅니다.
code %USERPROFILE%\go\src\hello.go

코드를 작성하고, (다음의 몇줄 안되는 코드는 암기하셔야 편합니다.)

1
2
3
4
5
6
package main

import "fmt"
func main() {
    fmt.Printf("hello, world\n")
}

GO111MODULE은 요즘은 어떻게 하라고 팀에게 자세히 언급도 하지 않습니다. 그냥 go.mod 파일이 존재하지 않는 디렉토리에서는 go get명령이 실행이 안된다고 설명하고 넘어갑니다.

vscode terminal

go get github.com/motemen/gore/cmd/gore

gore는 path에 정의된 gore를 사용하면 간혹 실행되지 않는 환경이 있습니다. 나중에 고치고 일단 실행은 되게 하려면, scoop의 junction 디렉토리의 gore.exe가 아닌 오리지널 디렉토리의 gore.exe를 사용하면 됩니다.

1
2
3
4
{
    "_terminal.integrated.shell.windows": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
    "terminal.integrated.shell.windows": "D:\\Users\\Administrator\\scoop\\apps\\go\\bin\\gore.exe"
}

*.md 파일 수정할 때 F8을 누르면 현재 라인(또는 선택된 라인들)을 터미널로 보내는 Setting은 알고 계시죠? 요즘은 이걸 REPL driven development 라고 불리우는 것 같습니다.

1
2
3
4
5
6
7
8
// Place your key bindings in this file to override the defaultsauto[]
[
    {
        "key": "f8",
        "command": "workbench.action.terminal.runSelectedText",
        "when": "editorLangId == 'markdown'"
    }
]

project directory

그냥 디렉토리를 만들어도 됩니다만, project-layout을 템플릿으로 사용합니다.
예를 들어 goldapi라는 어플리케이션을 go로 만든다라고 한다면,

cd c:\
# mkdir goldapi
git clone https://github.com/golang-standards/project-layout goldapi
cd goldapi
go mod init goldapi
go build
./goldapi
code .

후에 git remote delete master 하거나, 또는 https://github.com/golang-standards/project-layout/archive/master.zip 에서 다운받아 사용해도 됩니다.

goland setting

vscode에서 사용하는데 문제가 없다면, 특별히 goland에서도 그대로 사용할 수 있습니다.
해당 디렉토리에 가서 code .으로 vscode를 실행했다면, 같은 방법으로 goland .으로 실행합니다.

Ctrl-Alt-S로 설정할 때, 특별히 설정해얗 항목은 GoRoot정도 인 것 같습니다.

  • set GoRoot C:\Users\tkiminfo\scoop\apps\go\current\bin

Ref

공유하기

tkim
글쓴이
tkim
Software Engineer