본문 바로가기

리눅스

Go 컴파일 순서

728x90
반응형

Go 컴파일 순서

Go 컴파일러는 다음과 같은 단계로 소스 코드를 컴파일합니다.

 

  1. 토큰화 (Tokenization): 소스 코드를 토큰으로 분리합니다. 토큰은 프로그래밍 언어에서 의미를 가지는 최소 단위로, 예를 들어 변수 이름, 연산자, 키워드 등이 포함됩니다.
  2. 구문 분석 (Parsing): 토큰화된 코드를 읽어들여 문법적으로 분석합니다. 이 단계에서 소스 코드의 구조를 이해하고 추상 구문 트리(Abstract Syntax Tree, AST)를 생성합니다. 추상 구문 트리는 프로그램의 구조와 의미를 나타내는 트리 형태의 자료구조입니다.
  3. 타입 체크 (Type Checking): 추상 구문 트리를 분석하여 변수, 상수, 함수 등의 식별자에 대한 타입을 검사합니다. 이 단계에서 타입 오류를 발견하고 정적 타입 검사를 수행합니다. 타입 체크는 변수의 타입 일치성, 함수 호출의 타입 일치성 등을 확인합니다.
  4. 중간 코드 생성 (Intermediate Code Generation): 타입 체크가 완료되면 추상 구문 트리를 기반으로 중간 코드를 생성합니다. 중간 코드는 일련의 저수준 명령어로 구성되며, 목적 파일 형식에 독립적입니다. 중간 코드는 플랫폼에 종속적이지 않으며, 최적화를 위해 사용될 수 있습니다.
  5. 최적화 (Optimization): 생성된 중간 코드는 최적화 단계를 거쳐 성능을 향상시킵니다. 최적화는 여러 기법을 사용하여 중간 코드의 실행 속도나 메모리 사용량을 최적화하는 작업을 의미합니다. 최적화는 컴파일러에 따라 다양한 수준에서 수행될 수 있습니다.
  6. 기계 코드 생성 (Machine Code Generation): 최적화된 중간 코드를 기반으로 특정 플랫폼에 맞는 기계 코드를 생성합니다. 이 단계에서 기계어 명령어로 변환되며, 목적 파일 형식에 따라 실행 파일 또는 라이브러리 파일로 출력됩니다. 생성된 기계 코드는 컴퓨터에서 직접 실행할 수 있는 형태입니다.

Go 컴파일러는 위의 단계를 순차적으로 실행하여 소스 코드를 컴파일합니다. 이러한 과정을 통해 Go 언어로 작성된 프로그램을 실행 가능한 기계 코드로 변환할 수 있습니다.

 

Go 언어 코드를 컴파일하는 단계별 방법

1. Go 컴파일러 설치: Go 언어를 컴파일하려면 먼저 Go 컴파일러를 설치해야 합니다. 공식 Go 웹사이트(https://golang.org)에서 자신의 운영체제에 맞는 Go 설치 파일을 다운로드하여 설치합니다.

$ go version
go version go1.20.4 linux/amd64

2. 소스 코드 저장: 주어진 Go 코드를 텍스트 에디터에 복사하고, 확장자가 .go인 파일에 저장합니다. 예를 들어, hello.go와 같은 이름으로 파일을 저장합니다.

vim hello.go
package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}

3. 컴파일: 터미널 또는 명령 프롬프트를 열고, 소스 코드가 저장된 디렉토리로 이동합니다.

4. 다음 명령을 실행하여 Go 소스 코드를 컴파일합니다.

$ go build hello.go
$ ls -l | grep "^-"
-rwxrwxr-x 1 vagrant vagrant 1846526 Jun  2 19:14 hello
-rw-rw-r-- 1 vagrant vagrant      74 Jun  2 19:01 hello.go

위 명령은 현재 디렉토리에 hello라는 실행 파일을 생성합니다. 이 실행 파일은 소스 코드의 main 패키지에서 main 함수를 찾아 실행합니다.

5. 실행: 컴파일된 실행 파일을 실행하기 위해 다음 명령을 실행합니다.

$ ./hello
Hello, 世界

 

위 명령을 실행하면 터미널에서 Hello, 世界라는 출력이 나타날 것입니다. 따라서 위 단계를 따라하면 주어진 Go 코드를 컴파일하여 실행할 수 있습니다.

 

728x90
반응형