개발 환경 설정
Go 개발 환경을 구축하는 것은 매우 간단합니다. Go는 단일 바이너리로 배포되며, 설치 후 바로 개발을 시작할 수 있습니다. 이 섹션에서는 각 운영체제별 설치 방법부터 에디터 설정, 자주 쓰는 명령어까지 완전히 정리합니다.
Go 설치
Linux
방법 1: 공식 tar 파일 직접 설치 (권장)
# 기존 설치 제거 (있다면)
sudo rm -rf /usr/local/go
# Go 1.24 다운로드 (2024년 기준 최신 안정 버전)
wget https://go.dev/dl/go1.24.0.linux-amd64.tar.gz
# /usr/local에 압축 해제
sudo tar -C /usr/local -xzf go1.24.0.linux-amd64.tar.gz
# PATH 설정 (~/.bashrc 또는 ~/.zshrc에 추가)
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
source ~/.bashrc
# 설치 확인
go version
# 출력: go version go1.24.0 linux/amd64
방법 2: 패키지 매니저 (Ubuntu/Debian)
# snap을 통한 설치 (최신 버전 자동 업데이트)
sudo snap install go --classic
# apt-get (Ubuntu 저장소 버전은 구버전일 수 있음 — 비권장)
sudo apt-get install golang-go
macOS
방법 1: Homebrew (권장)
# Homebrew가 없다면 먼저 설치
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Go 설치
brew install go
# 설치 확인
go version
# 출력: go version go1.24.0 darwin/arm64
방법 2: 공식 installer
- https://go.dev/dl/ 접속
go1.24.0.darwin-amd64.pkg(Intel) 또는go1.24.0.darwin-arm64.pkg(Apple Silicon) 다운로드- PKG 파일 실행 후 안내에 따라 설치
- 터미널에서
go version으로 확인
Windows
방법 1: MSI installer (권장)
- https://go.dev/dl/ 접속
go1.24.0.windows-amd64.msi다운로드- MSI 파일 실행 후 안내에 따라 설치
- 설치 완료 후 새 PowerShell 또는 CMD 창에서 확인:
go version
# 출력: go version go1.24.0 windows/amd64
방법 2: Scoop (패키지 매니저)
# Scoop 설치 (없다면)
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
# Go 설치
scoop install go
환경 변수 설정
Go 설치 후 이해해야 할 핵심 환경 변수들이 있습니다.
# 현재 Go 환경 변수 전체 출력
go env
주요 환경 변수:
| 변수 | 설명 | 기본값 |
|---|---|---|
GOROOT | Go 표준 라이브러리 설치 경로 | /usr/local/go |
GOPATH | Go 작업 공간 경로 (모듈 캐시 등) | ~/go |
GOMODCACHE | 다운로드된 모듈 캐시 | $GOPATH/pkg/mod |
GOBIN | go install로 설치된 바이너리 경로 | $GOPATH/bin |
GOOS | 빌드 대상 OS | 현재 OS |
GOARCH | 빌드 대상 아키텍처 | 현재 아키텍처 |
GOPROXY | 모듈 다운로드 프록시 | https://proxy.golang.org |
GONOSUMCHECK | 체크섬 검증 제외 패턴 | - |
GOPATH/bin을 PATH에 추가(go install로 설치한 도구를 명령어로 실행하기 위해 필수):
# ~/.bashrc 또는 ~/.zshrc에 추가
export PATH=$PATH:$(go env GOPATH)/bin
특정 환경 변수 확인:
go env GOPATH # /home/user/go
go env GOROOT # /usr/local/go
go env GOPROXY # https://proxy.golang.org,direct
go env GOMODCACHE # /home/user/go/pkg/mod
GOPATH 방식 vs Go Modules 방식
Go에는 두 가지 의존성 관리 방식이 있었습니다. Go 1.16부터 Go Modules가 기본 이며, GOPATH 방식은 더 이상 권장하지 않습니다.
GOPATH 방식 (구식, 비권장)
~/go/
src/
github.com/
username/
myproject/ ← 프로젝트 코드
pkg/ ← 컴파일된 패키지
bin/ ← 바이너리
- 모든 프로젝트가
$GOPATH/src아래에 있어야 함 - 버전 관리가 어려움 (같은 패키지의 다른 버전 사용 불가)
go get이 최신 버전만 가져옴
Go Modules 방식 (현재 표준)
~/projects/
myproject/ ← 어디서든 프로젝트 생성 가능
go.mod ← 모듈 정의 파일
go.sum ← 체크섬 잠금 파일
main.go
- 프로젝트를 어느 디렉토리에나 만들 수 있음
- 정확한 버전 잠금으로 재현 가능한 빌드 보장
go.mod에 의존성이 명시됨
첫 프로젝트 생성
# 프로젝트 디렉토리 생성
mkdir hello-go && cd hello-go
# 모듈 초기화 (모듈 이름은 일반적으로 GitHub 경로 형식)
go mod init github.com/username/hello-go
# go.mod 파일이 생성됨
cat go.mod
go.mod 파일 내용:
module github.com/username/hello-go
go 1.24
module: 이 모듈의 고유 이름 (import 경로)go: 사용하는 Go 버전
의존성 추가 후 go.mod 예시:
module github.com/username/hello-go
go 1.24
require (
github.com/fatih/color v1.16.0
github.com/gin-gonic/gin v1.9.1
)
go.sum 파일은 각 의존성의 암호화 해시를 저장하여 변조를 방지합니다. 직접 편집하지 않으며, go mod tidy 명령으로 자동 관리됩니다.
VS Code 설정
VS Code는 Go 개발에 가장 널리 쓰이는 에디터입니다.
Go 확장 설치
- VS Code 실행
- 확장 마켓플레이스 열기 (
Ctrl+Shift+X) - "Go" 검색 후 Go (by Go Team at Google) 설치
- VS Code 재시작 후
.go파일 열면 자동으로gopls설치 안내
또는 명령줄로:
code --install-extension golang.go
Go Language Server (gopls)
gopls는 Go 공식 언어 서버로, 자동완성, 정의 이동, 리팩토링, 에러 하이라이팅 등 모든 IDE 기능의 기반입니다.
# 수동 설치
go install golang.org/x/tools/gopls@latest
settings.json 권장 설정
{
"go.useLanguageServer": true,
"go.formatTool": "gofmt",
"go.lintTool": "golangci-lint",
"go.lintOnSave": "package",
"go.formatOnSave": true,
"go.testOnSave": false,
"go.coverOnSave": false,
"go.buildOnSave": "package",
"go.vetOnSave": "package",
"editor.formatOnSave": true,
"[go]": {
"editor.defaultFormatter": "golang.go",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
}
}
디버깅 설정 (launch.json)
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${fileDirname}",
"args": [],
"env": {}
}
]
}
GoLand 기본 설정
JetBrains GoLand는 Go 전용 상용 IDE로, 강력한 리팩토링과 디버깅을 제공합니다.
- https://www.jetbrains.com/go/ 에서 다운로드
- 설치 후 Settings → Go → GOROOT 에서 Go SDK 경로 지정
- Settings → Go → Go Modules 에서 모듈 모드 활성화 확인
- 학생·오픈소스 프로젝트는 무료 라이선스 제공
go 명령어 완전 정리
| 명령어 | 설명 | 예시 |
|---|---|---|
go run | 소스 파일을 컴파일 없이 즉시 실행 | go run main.go |
go build | 현재 패키지를 바이너리로 컴파일 | go build -o app ./... |
go test | 테스트 파일(_test.go) 실행 | go test ./... |
go mod init | 새 모듈 초기화 | go mod init github.com/user/proj |
go mod tidy | 불필요한 의존성 제거, 필요한 것 추가 | go mod tidy |
go get | 특정 버전의 패키지 추가/업데이트 | go get github.com/gin-gonic/gin@v1.9.1 |
go install | 패키지를 GOBIN에 바이너리로 설치 | go install github.com/air-verse/air@latest |
go fmt | 코드 자동 포매팅 (gofmt 래퍼) | go fmt ./... |
go vet | 정적 분석으로 잠재적 버그 검출 | go vet ./... |
go doc | 패키지/함수 문서 출력 | go doc fmt.Println |
go env | Go 환경 변수 출력 | go env GOPATH |
go clean | 빌드 캐시 및 생성된 파일 삭제 | go clean -cache |
go list | 패키지 목록 출력 | go list ./... |
go work | 워크스페이스 관리 (멀티 모듈) | go work init |
자주 쓰는 명령어 예시
# 전체 프로젝트 테스트 (verbose 출력)
go test -v ./...
# 특정 테스트 함수만 실행
go test -run TestMyFunction ./...
# 커버리지 측정
go test -cover ./...
# 빌드 후 즉시 실행
go build -o app ./... && ./app
# 의존성 업데이트
go get -u ./...
# 사용하지 않는 의존성 정리
go mod tidy
# 패키지 문서 브라우저로 열기
go doc -http=:6060
gofmt — 자동 포매팅
Go는 언어 레벨에서 코드 스타일을 강제하는 gofmt 도구를 제공합니다. 탭 vs 스페이스 논쟁이 없습니다 — Go는 탭(tab) 을 사용합니다.
# 단일 파일 포매팅 (수정 사항 출력)
gofmt -d main.go
# 단일 파일 포매팅 (파일 직접 수정)
gofmt -w main.go
# 전체 프로젝트 포매팅
go fmt ./...
포매팅 전:
package main
import "fmt"
func main(){
fmt.Println("hello")
x:=1+2
}
포매팅 후:
package main
import "fmt"
func main() {
fmt.Println("hello")
x := 1 + 2
_ = x
}
gofmt는 저장 시 자동으로 실행되도록 에디터에 설정하는 것이 표준 관행입니다.
정리
이 섹션에서 다룬 내용:
- OS별 Go 1.24 설치— Linux(tar), macOS(Homebrew), Windows(MSI)
- 환경 변수—
GOROOT,GOPATH,GOBIN,GOPROXY의 역할 - Go Modules— 현대 Go 프로젝트의 표준 의존성 관리 방식
- VS Code 설정—
gopls, 자동 포매팅, 디버깅 설정 go명령어—run,build,test,mod,fmt,vet등 핵심 명령어gofmt— 코드 스타일을 강제하는 자동 포매터
환경 설정이 완료되었습니다. 다음 섹션에서 첫 번째 Go 프로그램을 작성해 보겠습니다.