프로그래밍 강좌/Go

Go 언어란? 설치 방법과 첫 프로그램(go run·go build) | Go 강좌 1강

IIRN 2026. 11. 13. 20:01
반응형
Go 언어의 특징을 살펴보고 Windows·macOS·Linux에 Go를 설치한 뒤 Hello 프로그램을 만들어 실행해요. package main, import, func main의 의미와 go run·go build의 차이, 초보자가 자주 만나는 오류까지 정리했어요.

Go 언어가 어떤 특징을 가진 언어인지 알아보고, 컴퓨터에 직접 설치해서 첫 프로그램을 실행해 봐요. 설치와 실행 방법을 처음에 확실히 익혀 두면 앞으로 36강 동안 나오는 모든 예제를 막힘없이 따라 할 수 있어요.

Go는 어떤 언어인가요

Go는 2009년 구글이 공개한 오픈 소스 프로그래밍 언어예요. 이름이 짧아서 검색이 어렵기 때문에 흔히 Golang이라고도 부르고, 공식 사이트 주소도 go.dev예요.

Go는 "대규모 소프트웨어를 여러 사람이 빠르고 안정적으로 만들 수 있게"라는 목표로 설계됐어요. 그래서 기능을 많이 넣기보다 꼭 필요한 것만 남겨 단순하게 만든 것이 가장 큰 특징이에요.

Go의 주요 특징

특징 설명
단순한 문법 키워드가 25개뿐이라 배워야 할 문법이 적어요.
컴파일 언어 소스 코드를 기계어로 번역해서 실행하기 때문에 실행 속도가 빨라요.
빠른 컴파일 큰 프로젝트도 몇 초 안에 빌드되는 경우가 많아요.
정적 타입 변수의 자료형이 컴파일할 때 정해져서 실수를 미리 잡아 줘요.
가비지 컬렉션 사용이 끝난 메모리를 자동으로 정리해 줘요.
쉬운 동시성 고루틴과 채널로 여러 작업을 동시에 처리하기 쉬워요(나중에 배워요).
단일 실행 파일 빌드하면 파일 하나가 나와서 배포가 간단해요.
강력한 기본 도구 포맷터(gofmt), 테스트, 패키지 관리 도구가 기본으로 들어 있어요.

정리하면 Go는 파이썬처럼 읽고 쓰기 쉬우면서도, C처럼 컴파일되어 빠르게 동작하는 언어를 목표로 해요.

어디에 쓰이나요

Go는 서버와 네트워크 프로그램 분야에서 특히 많이 쓰여요. Docker, Kubernetes 같은 유명한 클라우드 도구가 Go로 만들어졌어요.

웹 API 서버, 명령줄 도구(CLI), 마이크로서비스, 데브옵스 도구 등을 만들 때 자주 선택돼요. 실행 파일 하나로 배포할 수 있다는 점이 이런 분야에서 큰 장점이에요.

Go 설치하기

Go는 공식 사이트에서 운영체제에 맞는 설치 파일을 받아 설치해요. 항상 최신 안정 버전을 받는 것을 권장해요.

설치 파일 받기

브라우저에서 go.dev/dl 페이지에 접속하면 운영체제별 설치 파일이 보여요.

운영체제 설치 방법
Windows .msi 파일을 받아 실행하고 '다음'을 눌러 설치해요. 환경 변수도 자동으로 설정돼요.
macOS .pkg 파일을 받아 실행해요. Homebrew를 쓴다면 brew install go도 가능해요.
Linux .tar.gz 파일을 받아 /usr/local에 압축을 풀고 PATH를 추가해요.

Linux에서는 터미널에서 다음 순서로 설치해요. 파일 이름의 버전 부분은 실제로 받은 파일에 맞게 바꿔 주세요.

# 기존에 설치된 Go가 있다면 지우기
sudo rm -rf /usr/local/go
# 받은 파일을 /usr/local에 압축 해제
sudo tar -C /usr/local -xzf go1.xx.x.linux-amd64.tar.gz
# PATH에 Go 실행 파일 경로 추가(~/.profile 등에 넣어 두면 영구 적용)
export PATH=$PATH:/usr/local/go/bin

설치 확인하기

설치가 끝나면 새 터미널 창을 열고 go version을 입력해요. 설치 전에 열어 둔 터미널은 바뀐 환경 변수를 모를 수 있으니 꼭 새로 열어 주세요.

go version
go version go1.27.1 windows/amd64

버전 숫자와 운영체제 부분은 설치한 시점과 컴퓨터에 따라 달라요. 이런 형태의 문장이 나오면 설치에 성공한 거예요.

만약 'go'은(는) 내부 또는 외부 명령... 이 아닙니다나 command not found: go 같은 메시지가 나온다면 PATH 설정이 안 된 거예요.

터미널을 다시 열거나, Linux라면 PATH 추가 명령을 다시 확인해 보세요.

에디터 준비하기

코드는 어떤 텍스트 편집기로든 쓸 수 있지만, VS Code에 공식 Go 확장을 설치하는 조합을 추천해요. 자동 완성, 오류 표시, 저장할 때 자동 정렬까지 해 줘요.

확장을 처음 설치하면 필요한 도구(gopls 등)를 설치하라는 안내가 뜨는데, 모두 설치를 눌러 주면 돼요.

첫 프로그램 만들기

이제 화면에 인사말을 출력하는 프로그램을 만들어 봐요. Go 프로그램은 보통 모듈이라는 단위의 폴더 안에서 만들어요.

프로젝트 폴더와 go.mod 만들기

터미널에서 폴더를 만들고 그 안에서 go mod init 명령을 실행해요. 뒤에 붙이는 hello는 모듈 이름이에요.

mkdir hello
cd hello
go mod init hello
go: creating new go.mod: module hello

폴더 안에 go.mod 파일이 생겼어요. 이 파일은 "이 폴더가 hello라는 이름의 Go 모듈이다"라는 것을 알려 주는 설정 파일이에요.

module hello

go 1.27

go 다음 숫자는 설치한 Go 버전에 따라 달라요. 모듈과 패키지 관리는 뒤에서 자세히 배우니 지금은 "프로젝트를 시작할 때 한 번 실행하는 명령" 정도로 기억해 두세요.

main.go 작성하기

같은 폴더에 main.go 파일을 만들고 다음 코드를 입력해요.

package main

import "fmt"

// 프로그램이 시작되는 곳
func main() {
    fmt.Println("Hello, Go!")
    fmt.Println("Go에 오신 것을 환영해요.")
}

go run으로 실행하기

터미널에서 다음 명령을 입력해요. 점(.)은 "현재 폴더"를 뜻해요.

go run .
Hello, Go!
Go에 오신 것을 환영해요.

go run main.go처럼 파일 이름을 직접 적어도 똑같이 실행돼요. 다만 파일이 여러 개로 늘어나면 go run .이 편하니 이 방법에 익숙해지는 게 좋아요.

코드 한 줄씩 살펴보기

몇 줄 안 되는 코드지만 모든 Go 프로그램의 기본 뼈대가 다 들어 있어요.

package main

Go 코드는 반드시 어떤 패키지에 속해야 해서, 파일 첫 줄에 패키지 이름을 적어요. 패키지는 관련된 코드를 묶는 단위예요.

그중 main이라는 이름은 특별해요. package main은 "이 패키지는 다른 곳에서 가져다 쓰는 부품이 아니라, 직접 실행되는 프로그램이다"라는 뜻이에요.

import "fmt"

import는 다른 패키지를 가져와 쓰겠다는 선언이에요. fmt는 Go에 기본으로 들어 있는 표준 라이브러리 패키지로, 화면에 글자를 출력하거나 형식을 맞추는 기능을 담고 있어요.

패키지 이름은 큰따옴표로 감싸서 적어요. 여러 개를 가져올 때는 괄호로 묶는 방법도 있는데, 연습 문제에서 잠깐 보게 될 거예요.

func main()

func는 함수를 만드는 키워드예요. main 함수는 프로그램의 시작점이라서, 실행하면 Go가 이 함수를 찾아서 중괄호 { } 안의 코드를 위에서부터 차례로 실행해요.

package main 안에는 반드시 func main()이 하나 있어야 해요. 함수를 직접 만드는 방법은 나중에 자세히 배워요.

fmt.Println

fmt.Println은 fmt 패키지의 Println 함수를 호출한다는 뜻이에요. 괄호 안의 값을 출력하고 마지막에 줄을 바꿔 줘요.

Println의 첫 글자 P가 대문자인 것에 주목하세요. Go에서는 대문자로 시작하는 이름만 다른 패키지에서 쓸 수 있는데, 이 규칙도 뒤에서 다시 다뤄요.

줄 끝 세미콜론과 들여쓰기

Go는 문장 끝에 세미콜론(;)을 적지 않아요. 컴파일러가 줄 끝에 자동으로 넣어 주기 때문이에요.

들여쓰기는 탭을 쓰는 것이 Go의 표준이에요. go fmt 명령이나 에디터의 자동 정렬이 공식 스타일로 맞춰 주니 모양은 신경 쓰지 않아도 돼요.

# 현재 폴더의 Go 코드를 공식 스타일로 정리
go fmt .

go run과 go build

Go 코드를 실행하는 방법은 크게 두 가지예요. 둘의 차이를 알아 두면 개발할 때와 배포할 때 알맞은 명령을 고를 수 있어요.

go build로 실행 파일 만들기

go build는 코드를 컴파일해서 실행 파일을 만들어요. 파일 이름은 기본적으로 모듈 이름을 따라가요.

go build

명령이 성공하면 아무 메시지도 나오지 않아요. 대신 폴더에 macOS·Linux는 hello, Windows는 hello.exe 파일이 생겨요.

# macOS, Linux
./hello
# Windows
.\hello.exe
Hello, Go!
Go에 오신 것을 환영해요.

이 실행 파일은 Go가 설치되지 않은 같은 운영체제의 컴퓨터에 복사해도 그대로 실행돼요. 이름을 바꾸고 싶다면 -o 옵션을 써요.

go build -o greet

두 명령 비교

구분 go run go build
하는 일 컴파일 후 바로 실행 컴파일해서 실행 파일 생성
실행 파일 임시로 만들고 남기지 않음 폴더에 남김
주 용도 개발 중 빠르게 확인 배포, 반복 실행
결과 확인 바로 출력이 보임 만든 파일을 따로 실행해야 함

go run도 내부적으로는 컴파일을 해요. Go는 인터프리터 언어가 아니라서, 어떤 방법이든 먼저 기계어로 번역한 다음 실행한다는 점을 기억해 두세요.

Println 더 써 보기

변수는 다음 강에서 배우니, 지금은 출력 함수만으로 몇 가지를 더 해 봐요. main.go의 내용을 다음처럼 바꾸고 go run .으로 실행해 보세요.

package main

import "fmt"

func main() {
    fmt.Println("안녕하세요!")
    // 쉼표로 여러 값을 넘기면 사이에 공백이 들어가요
    fmt.Println("Go", "언어", "입문")
    // 숫자 계산 결과도 출력할 수 있어요
    fmt.Println("1 + 2 =", 1+2)
    // Print는 줄을 바꾸지 않아요
    fmt.Print("줄바꿈 ")
    fmt.Print("없음")
    fmt.Println() // 빈 Println으로 줄만 바꾸기
    fmt.Println("마지막 줄")
}
안녕하세요!
Go 언어 입문
1 + 2 = 3
줄바꿈 없음
마지막 줄

Println에 값을 쉼표로 여러 개 넘기면 사이사이에 공백을 넣어서 출력해요. 따옴표로 감싼 "1 + 2 ="는 글자 그대로, 따옴표 없는 1+2는 계산된 결과 3이 출력돼요.

Print는 줄을 바꾸지 않아서 다음 출력이 같은 줄에 이어 붙어요. 그래서 "줄바꿈 " 끝에 공백을 직접 넣었고, 괄호 안이 빈 fmt.Println()으로 줄을 바꿨어요.

자주 하는 실수와 오류 메시지

Go 컴파일러는 다른 언어보다 엄격한 편이에요. 처음에는 오류가 자주 나지만, 메시지를 읽는 법만 알면 금방 고칠 수 있어요.

쓰지 않는 패키지를 import한 경우

Go는 가져오기만 하고 쓰지 않은 패키지가 있으면 컴파일 자체를 거부해요. 경고가 아니라 오류라는 점이 다른 언어와 달라요.

package main

import (
    "fmt"
    "os" // 가져왔지만 사용하지 않음
)

func main() {
    fmt.Println("안녕")
}
./main.go:5:2: "os" imported and not used

main.go:5:2는 5번째 줄 2번째 칸이라는 위치 정보예요. 해당 import 줄을 지우면 해결돼요.

여는 중괄호를 다음 줄에 쓴 경우

다른 언어에서는 {를 다음 줄에 써도 되지만, Go에서는 오류가 나요. 줄 끝에 세미콜론이 자동으로 들어가면서 func main();처럼 해석되기 때문이에요.

func main()
{
    fmt.Println("안녕")
}
./main.go:5:1: syntax error: unexpected semicolon or newline before {

여는 중괄호 {는 항상 func main() {처럼 같은 줄 끝에 붙여 써야 해요.

go.mod 없이 go run . 을 실행한 경우

go mod init을 하지 않은 폴더에서 go run .을 실행하면 다음 오류가 나요.

go: go.mod file not found in current directory or any parent directory; see 'go help modules'

현재 폴더가 맞는지 확인하고, go mod init 모듈이름을 먼저 실행하면 돼요.

package 이름이 main이 아닌 경우

첫 줄을 package hello처럼 다르게 적으면 실행할 수 있는 프로그램으로 인식되지 않아요. 실행하려는 코드라면 반드시 package main과 func main()을 함께 써 주세요.

package hello is not a main package

그 밖에 주의할 점

  • Go는 대소문자를 구분해요. fmt.println이나 Func main은 오류가 나요.
  • 문자열은 큰따옴표 "..."로 감싸요. 작은따옴표 '...'는 문자 하나를 뜻하는 다른 문법이에요.
  • 파일을 저장하지 않고 실행하면 예전 코드가 실행되니, 결과가 이상하면 저장부터 확인하세요.

연습 문제

문제 1. 자기소개 출력하기

새 모듈을 만들고, 다음처럼 세 줄을 출력하는 프로그램을 작성해 보세요. 내용은 자유롭게 바꿔도 돼요.

이름: 김고퍼
관심 분야: 백엔드 개발
목표: Go로 웹 서버 만들기

문제 2. 오류 고치기

다음 코드는 실행되지 않아요. 오류 두 군데를 찾아 고쳐 보세요.

package main

import (
    "fmt"
    "os"
)

func main()
{
    fmt.Println("고쳐 보세요")
}

문제 3. 간단한 계산기 출력

Println에 쉼표로 여러 값을 넘기는 방법을 써서 다음 결과를 출력해 보세요. 계산 결과는 직접 적지 말고 Go가 계산하게 하세요.

완성하면 go build -o calc로 실행 파일도 만들어 실행해 보세요.

Go 계산기
10 + 3 = 13
10 * 3 = 30
10 / 3 = 3

정답 예시

문제 1 정답

package main

import "fmt"

func main() {
    fmt.Println("이름: 김고퍼")
    fmt.Println("관심 분야: 백엔드 개발")
    fmt.Println("목표: Go로 웹 서버 만들기")
}
이름: 김고퍼
관심 분야: 백엔드 개발
목표: Go로 웹 서버 만들기

실행 전에 mkdir intro, cd intro, go mod init intro 순서로 모듈을 만들어 두면 go run .으로 실행할 수 있어요.

문제 2 정답

사용하지 않는 "os"를 지우고, 여는 중괄호를 func main()과 같은 줄로 올리면 돼요. 패키지가 하나뿐이면 괄호 없이 한 줄로 써도 돼요.

package main

import "fmt"

func main() {
    fmt.Println("고쳐 보세요")
}
고쳐 보세요

문제 3 정답

package main

import "fmt"

func main() {
    fmt.Println("Go 계산기")
    fmt.Println("10 + 3 =", 10+3)
    fmt.Println("10 * 3 =", 10*3)
    // 정수끼리 나누면 소수점 아래가 버려져요
    fmt.Println("10 / 3 =", 10/3)
}
Go 계산기
10 + 3 = 13
10 * 3 = 30
10 / 3 = 3

10 / 3이 3.333...이 아니라 3인 이유는 정수끼리 나눴기 때문이에요. 자료형에 따른 계산 차이는 3강에서 자세히 다뤄요.

핵심 정리

  • Go는 구글이 만든 컴파일 언어로, 단순한 문법·빠른 컴파일·쉬운 동시성·단일 실행 파일이 특징이에요.
  • go.dev/dl에서 설치 파일을 받아 설치하고, 새 터미널에서 go version으로 확인해요.
  • 프로젝트를 시작할 때 go mod init 모듈이름으로 go.mod를 만들어요.
  • 실행할 프로그램은 package main과 시작점인 func main()이 꼭 있어야 해요.
  • import "fmt"로 표준 패키지를 가져오고, fmt.Println으로 출력해요. 쓰지 않는 import는 컴파일 오류예요.
  • go run .은 컴파일 후 바로 실행하고, go build는 실행 파일을 만들어 남겨요.
  • 여는 중괄호 {는 반드시 같은 줄 끝에 쓰고, 코드 모양은 go fmt에 맡기면 돼요.

강좌 이어 보기

반응형