Alert
์ด ๊ธ์ Claude Code์ ๋์์ ๋ฐ์ ์์ฑ๋์์ต๋๋ค
TL;DR
- macOS์์
brew install go๋ก ์ค์นํ๊ณGOPATH/bin์ PATH์ ์ถ๊ฐํ๋ฉด ์ค๋น ์๋ฃgo run์ ํ ์คํธ์ฉ ์์ ์คํ,go build๋ ๋ฐฐํฌ์ฉ ๋ฐ์ด๋๋ฆฌ ์์ฑgo install์pipx install์ ๊ฐ๊น์ด ๊ฐ๋ ์ด๊ณ ,go get์ดpip install์ ํด๋น- Go๋
go fmt๊ฐ ์ฌ์ค์ ๊ฐ์ ๋ผ ํฌ๋งคํ ๋ ผ์์ด ์์- ํ๋ก์ ํธ ์์ ์
go mod init์ผ๋ก ๋ชจ๋ ์ด๊ธฐํ ํ์
์ด ์๋ฆฌ์ฆ์ ๋ํ์ฌ
Jon Bodner์ Learning Go๋ฅผ ์ฝ๊ณ ์ ๋ฆฌํ Go ์ ๋ฌธ ์๋ฆฌ์ฆ๋ค. Python์ ์ต์ํ ๊ฐ๋ฐ์๊ฐ Go๋ฅผ ์ฒ์ ๋ง๋ฌ์ ๋๋ฅผ ๊ธฐ์ค์ผ๋ก, ๋ ์ธ์ด๋ฅผ ๋น๊ตํด ๊ฐ๋ฉฐ ๊ฐ๋ ์ ํ์ด๋ธ๋ค.
1. ์ค์น์ ํ๊ฒฝ ๋ณ์
macOS ๊ธฐ์ค์ผ๋ก Homebrew๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๋ค.
brew install go
go version
# go version go1.24.2 darwin/arm64Go๋ฅผ ์ค์นํ๋ฉด ๋ ๊ฐ์ง ๊ฒฝ๋ก๊ฐ ์ค์ํ๋ค.
GOROOT: Go ์์ฒด๊ฐ ์ค์น๋ ๊ฒฝ๋ก (๋ณดํต ๊ฑด๋๋ฆด ์ผ ์์)GOPATH: Go๊ฐ ์ธ๋ถ ํจํค์ง์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ ์ฅํ๋ ์์ ๋๋ ํ ๋ฆฌ
GOPATH์ ๊ธฐ๋ณธ๊ฐ์ ~/go์ด๊ณ , go install๋ก ์ค์นํ ๋ฐ์ด๋๋ฆฌ๊ฐ $GOPATH/bin์ ๋ค์ด๊ฐ๋ค. ์ด ๊ฒฝ๋ก๋ฅผ PATH์ ์ถ๊ฐํด์ผ ์ค์นํ ๋๊ตฌ๋ฅผ ๋ฐ๋ก ์คํํ ์ ์๋ค.
# ~/.zshrc ๋๋ ~/.bashrc์ ์ถ๊ฐ
export GOPATH="$HOME/go"
export PATH="$GOPATH/bin:$PATH"ํ์ฌ ์ค์ ์ ํ์ธํ๋ ค๋ฉด go env๋ฅผ ์ฐ๋ฉด ๋๋ค.
go env # ์ ์ฒด ํ๊ฒฝ ๋ณ์ ์ถ๋ ฅ
go env GOPATH # ํน์ ๋ณ์๋ง ํ์ธ
go env GOROOTPython๊ณผ์ ์ฐจ์ด
Python์
sys.prefix,site-packages๊ฐ์ ๊ฒฝ๋ก๊ฐ ๊ฐ์ํ๊ฒฝ๋ง๋ค ๋ฌ๋ผ์ง์ง๋ง, Go๋GOPATHํ๋๋ก ๊ธ๋ก๋ฒํ๊ฒ ๊ด๋ฆฌ๋๋ค. ํ๋ก์ ํธ๋ณ ์์กด์ฑ ๊ฒฉ๋ฆฌ๋ Go ๋ชจ๋(go.mod)์ด ๋ด๋นํ๋ค.
2. ์คํ ๋ฐฉ์ โ go run vs go build
Python์ ์ธํฐํ๋ฆฌํฐ๊ฐ ์์ค ์ฝ๋๋ฅผ ์ง์ ์ฝ์ด์ ์คํํ๋ค. Go๋ ์ปดํ์ผ ์ธ์ด๋ผ์ ๋ฐ๋์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ง๋ ๋ค ์คํํ๋ ๊ตฌ์กฐ๋ค. ๋ค๋ง go run์ด ์ด ๊ณผ์ ์ ํ ๋ฒ์ ์ฒ๋ฆฌํด ์ค๋ค.
go run โ ํ
์คํธ์ฉ ์คํ
go run main.go๋ด๋ถ์ ์ผ๋ก ์์ ๋๋ ํ ๋ฆฌ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ง๋ค๊ณ , ์คํํ๊ณ , ๋๋๋ฉด ์ญ์ ํ๋ค. Python์์ python main.py ์น๋ ๊ฒ๊ณผ ์ฒด๊ฐ์ด ๋น์ทํ์ง๋ง, ์ค์ ๋ก๋ ์ปดํ์ผ์ด ์ผ์ด๋๊ณ ์๋ค.
go build โ ๋ฐ์ด๋๋ฆฌ ์์ฑ
go build -o myapp main.go
./myapp-o ์ต์
์ผ๋ก ์ถ๋ ฅ ํ์ผ๋ช
์ ์ง์ ํ๋ค. ์์ฑ๋ ๋ฐ์ด๋๋ฆฌ๋ Go๊ฐ ์ค์น๋์ง ์์ ํ๊ฒฝ์์๋ ์คํ ๊ฐ๋ฅํ๋ค. Python์ผ๋ก ์น๋ฉด PyInstaller๋ก ํจํค์งํ ๊ฒ๊ณผ ๋น์ทํ ๊ฒฐ๊ณผ๋ฌผ์ด์ง๋ง, Go๋ ์ด๊ฒ ๊ธฐ๋ณธ ๋์์ด๋ค.
# ์ ๋ฆฌ
go run main.go # ์ปดํ์ผ + ์คํ + ์์ํ์ผ ์ญ์ (๊ฐ๋ฐ ์ค ํ
์คํธ)
go build -o myapp main.go # ์ปดํ์ผ + ๋ฐ์ด๋๋ฆฌ ์์ฑ (๋ฐฐํฌ์ฉ)3. ํจํค์ง ์ค์น โ go install๊ณผ go get
Go์์ ๋ญ๊ฐ๋ฅผ โ์ค์นโํ๋ ๋ช ๋ น์ด๋ ๋ ๊ฐ์ง๋ค. ์ด๋ฆ์ด ๋น์ทํด์ ์ฒ์์ ํท๊ฐ๋ฆฌ์ง๋ง, ์ฉ๋๊ฐ ์์ ํ ๋ค๋ฅด๋ค.
go install โ CLI ๋๊ตฌ ์ค์น
Go๋ก ๋ง๋ค์ด์ง ์คํ ํ์ผ(CLI ๋๊ตฌ)์ ๋ด ์์คํ
์ ์ค์นํ๋ ๋ช
๋ น์ด๋ค. ์์ค ์ฝ๋๋ฅผ ๋ฐ์์ ์ปดํ์ผํ ๋ค, ์์ฑ๋ ๋ฐ์ด๋๋ฆฌ๋ฅผ $GOPATH/bin์ ๋ฃ์ด์ค๋ค.
# golangci-lint ์ค์น (๋ฆฐํ
๋๊ตฌ)
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# ์ค์น ํ์ธ
which golangci-lint
# /Users/you/go/bin/golangci-lint@latest๋ ์ต์ ๋ฒ์ ์ ์๋ฏธํ๊ณ , @v1.62.0์ฒ๋ผ ํน์ ๋ฒ์ ๋ ์ง์ ํ ์ ์๋ค. ๊ฒฐ๊ณผ๋ฌผ์ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด๋ผ์ ์ค์น ํ์๋ Go๊ฐ ์์ด๋ ์คํ ๊ฐ๋ฅํ๋ค.
ํ๋ก์ ํธ ์์กด์ฑ๊ณผ๋ ๋ฌด๊ดํ๋ค. go.mod์ ์๋ฌด๊ฒ๋ ์ถ๊ฐ๋์ง ์๋๋ค.
go get โ ํ๋ก์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
ํ์ฌ ํ๋ก์ ํธ์์ importํด์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ๋ ๋ช
๋ น์ด๋ค. go.mod์ go.sum์ ์์กด์ฑ์ด ๊ธฐ๋ก๋๋ค.
# ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์น ํ๋ ์์ํฌ ์ถ๊ฐ
go get github.com/gin-gonic/gin
# ํน์ ๋ฒ์ ์ง์
go get github.com/gin-gonic/gin@v1.10.0์คํํด๋ ๋ฐ์ด๋๋ฆฌ๊ฐ ์๊ธฐ์ง ์๋๋ค. ์ฝ๋์์ import "github.com/gin-gonic/gin"์ผ๋ก ๊ฐ์ ธ๋ค ์ฐ๋ ์ฉ๋๋ค.
Python ๋์ ์ ๋ฆฌ
| Go | Python | ์ฉ๋ |
|---|---|---|
go install <ํจํค์ง>@latest | pipx install / uv tool install | CLI ๋๊ตฌ๋ฅผ ์์คํ ์ ์ค์น |
go get <ํจํค์ง> | pip install / uv add | ํ๋ก์ ํธ ์์กด์ฑ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ |
go mod tidy | pip freeze / uv sync | ์์กด์ฑ ์ ๋ฆฌ ๋ฐ ๋๊ธฐํ |
ํต์ฌ ์ฐจ์ด
Python์์๋
pip install์ด ๋๊ตฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๋ฆฌ์ง ์๊ณ ์ค์นํ๋ค.pipx๊ฐ ๋์จ ์ด์ ๋ ์ด ๊ตฌ๋ถ์ด ๋ชจํธํด์๋ค. Go๋ ์ฒ์๋ถํฐgo install(๋๊ตฌ)๊ณผgo get(๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ผ๋ก ๋ช ๋ น์ด๊ฐ ๋ถ๋ฆฌ๋์ด ์๋ค.
4. ์ฝ๋ ํฌ๋งคํ ๊ณผ ๋ฆฐํ
Python์์๋ black, ruff, isort, flake8 ๋ฑ ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์กฐํฉํด์ ์ด๋ค. Go๋ ํฌ๋งคํ ๋๊ตฌ๊ฐ ์ธ์ด์ ๋ด์ฅ๋์ด ์๊ณ , ์ฌ์ค์ ๊ฐ์ ๋ค.
go fmt โ ๊ธฐ๋ณธ ํฌ๋งคํฐ
go fmt ./..../...๋ ํ์ฌ ๋๋ ํ ๋ฆฌ ํ์์ ๋ชจ๋ Go ํ์ผ์ ๋์์ผ๋ก ํ๋ค. ํญ vs ์คํ์ด์ค, ์ค๊ดํธ ์์น ๊ฐ์ ์คํ์ผ ๋
ผ์์ด Go์์๋ ์กด์ฌํ์ง ์๋๋ค. go fmt๊ฐ ์ ํ ์คํ์ผ์ด ๊ณง ํ์ค์ด๋ค.
goimports โ import ์๋ ์ ๋ฆฌ
go install golang.org/x/tools/cmd/goimports@latest
goimports -w .go fmt์ ๊ธฐ๋ฅ์ ๋ํด์ ์ฌ์ฉํ์ง ์๋ import ์ ๊ฑฐ, ๋น ์ง import ์๋ ์ถ๊ฐ๋ฅผ ํด์ค๋ค. Python์ isort + autoflake์ ํด๋นํ๋ค.
go vet โ ์ ์ ๋ถ์
go vet ./...์ปดํ์ผ์ ํต๊ณผํ์ง๋ง ๋ฒ๊ทธ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ๊ฒ์ถํ๋ค. ์๋ฅผ ๋ค์ด fmt.Printf์์ ํฌ๋งท ๋ฌธ์์ด๊ณผ ์ธ์ ๊ฐ์๊ฐ ์ ๋ง๋ ๊ฒฝ์ฐ๋ฅผ ์ก์์ค๋ค.
golangci-lint โ ํตํฉ ๋ฆฐํ
๋๊ตฌ
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
golangci-lint rungo vet์ ํฌํจํด์ ์์ญ ๊ฐ์ ๋ฆฐํฐ๋ฅผ ํ ๋ฒ์ ๋๋ ค์ฃผ๋ ๋๊ตฌ๋ค. Python์ ruff๊ฐ ์ฌ๋ฌ ๋ฆฐํฐ๋ฅผ ํตํฉํ ๊ฒ๊ณผ ๋น์ทํ ํฌ์ง์
์ด๋ค.
Python vs Go ํฌ๋งคํ ๋น๊ต
- Python: black/ruff๋ ์ ํ์ด๊ณ , ํ๋ง๋ค ์ค์ ์ด ๋ค๋ฅผ ์ ์๋ค
- Go:
go fmt๊ฐ ์ ์ผํ ํ์ค์ด๋ค. ์ค์ ํ์ผ๋ ์๊ณ , ์ต์ ๋ ์๋ค- ๊ฒฐ๊ณผ์ ์ผ๋ก Go ํ๋ก์ ํธ๋ ์ด๋๋ฅผ ๊ฐ๋ ์ฝ๋ ์คํ์ผ์ด ๋์ผํ๋ค
5. ๋ชจ๋ ์ด๊ธฐํ (go mod)
Go 1.16๋ถํฐ ๋ชจ๋ ๋ชจ๋๊ฐ ๊ธฐ๋ณธ์ด๋ค. ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด go mod init์ ๋จผ์ ์คํํด์ผ ํ๋ค.
mkdir myproject && cd myproject
go mod init github.com/username/myproject์ด ๋ช
๋ น์ด๊ฐ go.mod ํ์ผ์ ์์ฑํ๋ค. Python์ uv init์ด๋ pyproject.toml ์์ฑ์ ํด๋นํ๋ค.
module github.com/username/myproject
go 1.24.2
์ดํ go get์ผ๋ก ํจํค์ง๋ฅผ ์ถ๊ฐํ๋ฉด go.mod์ ์์กด์ฑ์ด ๊ธฐ๋ก๋๊ณ , go.sum์ ์ฒดํฌ์ฌ์ด ์ ์ฅ๋๋ค.
go get github.com/gin-gonic/gin๋ชจ๋ ๊ด๋ จ ์ฐธ๊ณ
go mod tidy: ์ฌ์ฉํ์ง ์๋ ์์กด์ฑ ์ ๊ฑฐ, ๋น ์ง ์์กด์ฑ ์ถ๊ฐgo mod download:go.mod๊ธฐ๋ฐ์ผ๋ก ์์กด์ฑ ๋ค์ด๋ก๋ (uv sync์ ์ ์ฌ)