출시·고도화 중
Go 안내서 · 1/6
Go는 단순한 문법, 빠른 컴파일, 기본으로 들어 있는 동시성 기능을 갖춘 언어입니다. 이 장에서는 Go를 설치하고, 첫 모듈을 만들고, 프로그램을 실행하고 빌드하는 과정까지 차례로 살펴봅니다. 편집기에서 자동 완성과 오류 표시를 받는 방법도 함께 정리합니다.
공식 내려받기 쪽 go.dev/dl에서 운영체제에 맞는 설치 파일을 받습니다. Windows와 macOS는 설치 프로그램을 실행하면 되고, Linux는 압축 파일을 /usr/local에 풀고 PATH에 /usr/local/go/bin을 더합니다. 패키지 관리자(Homebrew, winget, 배포판 저장소)로 설치해도 됩니다. 다만 배포판 저장소의 Go는 오래된 경우가 있으니 버전을 꼭 확인합니다.
# Linux 예: 받은 압축 파일을 풀고 PATH 에 더하기
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go*.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
# 설치 확인
go version
go env GOPATH GOROOTgo version이 버전을 출력하면 설치가 끝난 것입니다. go env는 Go 도구가 쓰는 환경 값을 보여 줍니다. GOROOT는 Go 자체가 설치된 곳이고, GOPATH는 내려받은 모듈 캐시와 go install로 설치한 실행 파일(GOPATH/bin)이 놓이는 곳입니다. GOPATH/bin도 PATH에 넣어 두면 편리합니다.
Go 코드는 모듈 단위로 관리합니다. 모듈은 go.mod 파일이 있는 디렉터리와 그 아래 패키지들의 묶음입니다. 새 프로젝트를 시작할 때는 빈 디렉터리에서 go mod init으로 모듈 경로를 정합니다. 모듈 경로는 보통 코드가 올라갈 저장소 주소를 씁니다.
mkdir hello && cd hello
go mod init example.com/hello이제 main.go를 만듭니다. 실행 파일이 되는 프로그램은 반드시 package main이어야 하고, main 함수에서 시작합니다.
package main
import "fmt"
func main() {
fmt.Println("안녕하세요, Go!")
}go run은 컴파일과 실행을 한 번에 합니다. 결과 실행 파일은 임시 디렉터리에 만들어졌다가 사라지므로 개발 중 빠르게 확인할 때 씁니다. go build는 현재 디렉터리에 실행 파일을 남깁니다.
go run . # 현재 패키지를 컴파일하고 실행
go build # 실행 파일 hello(Windows 는 hello.exe) 생성
go build -o bin/app # 출력 경로 지정
./hello
# 다른 운영체제용으로 교차 컴파일
GOOS=linux GOARCH=arm64 go build -o hello-linux-arm64Go 실행 파일은 기본적으로 필요한 것을 모두 담은 하나의 파일이라 배포가 간단합니다. GOOS와 GOARCH 환경 변수만 바꾸면 별도 도구 없이 다른 플랫폼용 파일을 만들 수 있습니다.
| 명령 | 하는 일 |
|---|---|
go run . | 컴파일 후 바로 실행 |
go build | 실행 파일 또는 패키지 빌드 |
go test ./... | 모든 패키지의 테스트 실행 |
go fmt ./... | 표준 형식으로 코드 정리 |
go vet ./... | 흔한 실수를 찾는 정적 검사 |
go mod tidy | 의존성 목록을 코드에 맞게 정리 |
go doc fmt.Println | 문서 보기 |
./...은 현재 디렉터리와 그 아래 모든 패키지를 뜻합니다. go fmt가 만든 형식이 Go 커뮤니티의 표준이므로 들여쓰기나 괄호 위치를 두고 고민할 필요가 없습니다. Go 코드는 들여쓰기에 탭을 씁니다.
작은 프로그램은 go.mod와 main.go만으로 충분합니다. 규모가 커지면 다음과 같은 구조가 흔히 쓰입니다. 공식으로 강제되는 구조는 아니지만 internal 디렉터리는 도구가 특별히 다룹니다.
hello/
go.mod # 모듈 경로와 의존성
go.sum # 의존성 체크섬
main.go # package main
cmd/
server/main.go # 실행 파일이 여럿이면 cmd 아래에 둔다
internal/
store/store.go # 이 모듈 안에서만 가져다 쓸 수 있는 패키지
greet/
greet.go # 다른 모듈도 쓸 수 있는 패키지한 디렉터리는 하나의 패키지입니다. 디렉터리 안의 .go 파일은 모두 같은 package 이름을 써야 합니다. internal 아래 패키지는 그 부모 디렉터리 트리 안에서만 가져올 수 있어서, 외부에 공개하고 싶지 않은 코드를 두기에 좋습니다.
gopls는 Go 팀이 만드는 공식 언어 서버입니다. 자동 완성, 정의로 이동, 이름 바꾸기, 오류 표시, 가져오기 정리를 제공합니다. VS Code에서는 Go 확장을 설치하면 필요한 도구를 설치하라는 안내가 나오고, GoLand는 자체 분석기를 내장하고 있습니다. Neovim, Emacs 같은 편집기도 LSP 설정으로 gopls를 쓸 수 있습니다.
go install golang.org/x/tools/gopls@latest
gopls version저장할 때 gofmt(또는 goimports)가 자동으로 실행되도록 설정해 두면 형식과 import 목록을 신경 쓰지 않아도 됩니다. Go는 쓰지 않는 import나 쓰지 않는 지역 변수를 컴파일 오류로 처리하므로, 가져오기를 자동으로 정리해 주는 설정이 특히 쓸모 있습니다.
go version으로 확인합니다.go mod init <모듈 경로>로 시작하며, 실행 파일은 package main의 main 함수에서 시작합니다.go run은 빠른 실행, go build는 실행 파일 생성, GOOS/GOARCH로 교차 컴파일합니다.internal은 모듈 안에서만 쓰는 코드를 둡니다.gopls를 연결하고 저장할 때 형식 정리가 되도록 설정합니다.
댓글 0개
로그인 · 로그인하면 댓글을 남길 수 있습니다.
첫 댓글을 남겨 보세요.