본문으로 건너뛰기

개발 환경 설정

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

  1. https://go.dev/dl/ 접속
  2. go1.24.0.darwin-amd64.pkg (Intel) 또는 go1.24.0.darwin-arm64.pkg (Apple Silicon) 다운로드
  3. PKG 파일 실행 후 안내에 따라 설치
  4. 터미널에서 go version으로 확인

Windows​

방법 1: MSI installer (권장)

  1. https://go.dev/dl/ 접속
  2. go1.24.0.windows-amd64.msi 다운로드
  3. MSI 파일 실행 후 안내에 따라 설치
  4. 설치 완료 후 새 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

주요 환경 변수:

변수설명기본값
GOROOTGo 표준 라이브러리 설치 경로/usr/local/go
GOPATHGo 작업 공간 경로 (모듈 캐시 등)~/go
GOMODCACHE다운로드된 모듈 캐시$GOPATH/pkg/mod
GOBINgo 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 확장 설치​

  1. VS Code 실행
  2. 확장 마켓플레이스 열기 (Ctrl+Shift+X)
  3. "Go" 검색 후 Go (by Go Team at Google) 설치
  4. 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로, 강력한 리팩토링과 디버깅을 제공합니다.

  1. https://www.jetbrains.com/go/ 에서 다운로드
  2. 설치 후 Settings → Go → GOROOT 에서 Go SDK 경로 지정
  3. Settings → Go → Go Modules 에서 모듈 모드 활성화 확인
  4. 학생·오픈소스 프로젝트는 무료 라이선스 제공

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 envGo 환경 변수 출력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 프로그램을 작성해 보겠습니다.