🚀 GO 환경설정 및 설치

📋 목차


1. Go 설치

💻 운영체제별 설치

macOS

# Homebrew로 설치 (권장)
brew install go
 
# 또는 공식 사이트에서 다운로드
# https://golang.org/dl/

Ubuntu/Debian

# APT로 설치
sudo apt update
sudo apt install golang-go
 
# 또는 최신 버전 설치
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz

Windows

# Chocolatey로 설치
choco install golang
 
# 또는 공식 MSI 설치 파일 다운로드
# https://golang.org/dl/

✅ 설치 확인

# Go 버전 확인
go version
# 출력 예시: go version go1.21.4 darwin/amd64
 
# Go 환경 정보 확인
go env

🔧 환경변수 설정

# ~/.bashrc 또는 ~/.zshrc에 추가
export GOROOT=/usr/local/go        # Go 설치 경로
export GOPATH=$HOME/go             # Go 작업공간
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
 
# 설정 적용
source ~/.bashrc  # 또는 source ~/.zshrc

2. 개발 환경 구성

🎨 VS Code 설정

필수 확장 프로그램

1. Go (공식) - ms-vscode.go
2. Go Test Explorer - premparihar.gotestexplorer
3. GitLens (옵션) - eamodio.gitlens

VS Code 설정 추가

// settings.json에 추가
{
    "go.useLanguageServer": true,
    "go.toolsManagement.autoUpdate": true,
    "go.lintOnSave": "package",
    "go.formatTool": "goimports",
    "go.testFlags": ["-v"],
    "editor.formatOnSave": true
}

🛠️ Go Tools 설치

# Go 개발 도구들 설치
go install golang.org/x/tools/gopls@latest           # Language Server
go install golang.org/x/tools/cmd/goimports@latest   # Import 관리
go install github.com/go-delve/delve/cmd/dlv@latest  # 디버거
go install honnef.co/go/tools/cmd/staticcheck@latest # 정적 분석
 
# VS Code에서 자동 설치
# Ctrl+Shift+P -> "Go: Install/Update Tools"

🏗️ 다른 IDE 옵션

GoLand (JetBrains)

  • 상용 IDE, 강력한 기능
  • 디버깅, 리팩토링, 테스팅 지원
  • 30일 무료 체험

Vim/Neovim

" vim-go 플러그인
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }

3. 첫 번째 Go 프로그램

📁 프로젝트 생성

# 프로젝트 디렉토리 생성
mkdir hello-go && cd hello-go
 
# Go 모듈 초기화 (중요!)
go mod init github.com/yourusername/hello-go
# 또는 간단히
go mod init hello-go

👋 Hello World

// main.go
package main
 
import "fmt"
 
func main() {
    fmt.Println("Hello, Go!")
}

▶️ 실행 방법

# 1. 직접 실행 (개발 중)
go run main.go
 
# 2. 빌드 후 실행 (배포용)
go build -o hello main.go
./hello
 
# Windows에서는
go build -o hello.exe main.go
hello.exe
 
# 3. 크로스 컴파일 (다른 OS용)
GOOS=linux GOARCH=amd64 go build -o hello-linux main.go
GOOS=windows GOARCH=amd64 go build -o hello.exe main.go

4. 프로젝트 구조

📂 표준 Go 프로젝트 구조

my-go-project/
├── go.mod                 # 모듈 정의
├── go.sum                 # 의존성 체크섬
├── main.go                # 메인 파일
├── README.md              # 프로젝트 설명
├── cmd/                   # 실행 파일들
│   ├── server/
│   │   └── main.go
│   └── client/
│       └── main.go
├── internal/              # 내부 패키지 (외부 접근 불가)
│   ├── config/
│   ├── handler/
│   └── service/
├── pkg/                   # 외부 공개 패키지
│   ├── api/
│   ├── model/
│   └── utils/
├── test/                  # 테스트 파일
├── docs/                  # 문서
├── scripts/               # 스크립트
└── deployments/           # 배포 설정

🔍 주요 디렉토리 설명

cmd/ - 실행 파일

// cmd/server/main.go
package main
 
import (
    "fmt"
    "log"
    "net/http"
    
    "github.com/yourusername/my-project/internal/handler"
)
 
func main() {
    http.HandleFunc("/", handler.HomeHandler)
    log.Println("Server starting on :8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

internal/ - 내부 패키지

// internal/handler/home.go
package handler
 
import (
    "fmt"
    "net/http"
)
 
func HomeHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello from Go server!")
}

pkg/ - 공개 패키지

// pkg/utils/string.go
package utils
 
import "strings"
 
// 외부 패키지에서 사용 가능
func Capitalize(s string) string {
    if len(s) == 0 {
        return s
    }
    return strings.ToUpper(s[:1]) + strings.ToLower(s[1:])
}

📦 Go 모듈 관리

go.mod 파일

module github.com/yourusername/my-project
 
go 1.21
 
require (
    github.com/gorilla/mux v1.8.0
    github.com/joho/godotenv v1.4.0
)
 
require (
    github.com/gorilla/context v1.1.1 // indirect
)

의존성 관리 명령어

# 의존성 추가
go get github.com/gorilla/mux
 
# 특정 버전 추가
go get github.com/gorilla/mux@v1.8.0
 
# 의존성 정리 (사용하지 않는 것 제거)
go mod tidy
 
# 의존성 다운로드
go mod download
 
# 의존성 검증
go mod verify
 
# 벤더 디렉토리 생성 (모든 의존성 복사)
go mod vendor

🔧 개발 워크플로

1. 새 프로젝트 시작

mkdir my-new-project
cd my-new-project
go mod init github.com/username/my-new-project

2. 코드 작성

// main.go
package main
 
import "fmt"
 
func main() {
    fmt.Println("Starting new Go project!")
}

3. 테스트 작성

// main_test.go
package main
 
import "testing"
 
func TestMain(t *testing.T) {
    // 테스트 코드
}

4. 실행 및 테스트

# 코드 포맷팅
go fmt ./...
 
# 코드 검사
go vet ./...
 
# 테스트 실행
go test ./...
 
# 프로그램 실행
go run main.go

5. 빌드 및 배포

# 로컬 빌드
go build -o myapp
 
# 최적화된 빌드 (바이너리 크기 축소)
go build -ldflags="-s -w" -o myapp
 
# 다중 플랫폼 빌드
GOOS=linux go build -o myapp-linux
GOOS=windows go build -o myapp.exe

🚨 자주 하는 실수

1. GOPATH 혼동

주의사항

Go 1.11+ 에서는 모듈 시스템을 사용하므로 GOPATH 설정이 필수가 아닙니다.

# 잘못된 방법 (구버전 방식)
export GOPATH=$HOME/go
cd $GOPATH/src/github.com/user/project
 
# 올바른 방법 (모듈 방식)
mkdir my-project
cd my-project
go mod init my-project

2. 패키지 명명

// 잘못된 예시
package myPackage  // 카멜케이스 X
package my_package // 언더스코어 X
 
// 올바른 예시
package mypackage  // 소문자
package handler    // 간결하고 명확

3. 의존성 관리

# 잘못된 방법
go get github.com/some/package
# go.mod 없이 직접 설치
 
# 올바른 방법
go mod init myproject  # 먼저 모듈 초기화
go get github.com/some/package

✅ 체크리스트

설치 완료 확인

  • Go 설치 완료 (go version 작동)
  • 환경변수 설정 완료
  • VS Code + Go 확장 설치
  • Go tools 설치 완료

개발 준비 완료

  • 첫 Hello World 프로그램 실행 성공
  • go mod init 이해
  • 기본 프로젝트 구조 파악
  • 기본 명령어 숙지

다음 단계

환경 설정이 완료되었다면 GO 기본문법과 변수함수로 넘어가세요!