Go 언어가 실행되기까지의 단계를 다음과 같이 나누어서 "Hello Go"를 출력해보고자 한다. 앞으로 Go 언어를 이용해 프로그래밍을 할 때에 다음과 같은 5단계를 거쳐야 한다는 사실을 기억하자.
< 목차 >
- 폴더 생성
- .go 파일 생성 및 작성
- Go 모듈 생성
- 빌드
- 실행
1. 폴더 생성
Go 언어에서 모든 코드는 패키지 단위로 작성된다. 같은 디렉토리에 위치한 .go 파일들은 모두 같은 패키지에 포함되고 패키지명으로는 폴더명을 사용한다. 예를 들어 Go_Study/hello 폴더를 생성하고 hello 폴더 아래 여러 .go 파일을 생성했다면 모두 같은 hello 패키지에 포함된다.
만약 Go_Study/hello 아래 extra 폴더를 만들고 extra 폴더 아래 또 .go 파일들을 생성한다면 어떻게 될까? hello 와 extra 폴더는 같은 폴더가 아니기 때문에 extra 아래 있는 .go 파일들은 hello 패키지가 아닌 extra 패키지에 포함된다.
2. .go 파일 생성 및 작성
Go 언어를 사용해서 Go 코드를 작성하면 된다. 확장자명은 반드시 .go로 하도록 하자.
다음은 "Hello Go"를 출력하는 코드이다.
package main
import "fmt"
func main() {
fmt.Println("Hello Go")
}
간단하게 코드를 살펴보도록 하자.
👉 package main
패키지 선언은 이 코드가 어떤 패키지에 속하는지 알려준다. 주의할 점은 Go 언어의 모든 코드는 반드시 패키지 선언으로 시작해야 한다는 것이다. package main은 main 패키지에 속한 코드임을 컴파일러에게 알려준다. main 패키지는 프로그램 시작점을 포함하는 특별한 패키지이다. main( ) 함수가 없는 패키지는 패키지 이름으로 main을 쓸 수 없다. main( ) 함수가 없기 때문에 실행 파일을 만들 수 없고 다른 패키지에서 외부 패키지로 사용된다.
여기서는 다음 두가지만 기억하도록 하자.
"Go 언어는 패키지 선언으로 시작되어야 한다."
"package main은 프로그램 시작점이 있는 패키지이다."
👉 import "fmt"
fmt 패키지를 가져오는 구문이다. 특정 패키지에서 제공하는 기능을 사용하고 싶을 때는 import로 해당 패키지를 불러와야 한다. 여기서 사용된 fmt 패키지는 표준 입출력을 다루는 내장 패키지이다. 표준 입출력으로 텍스트를 출력하거나 입력 받을 때 사용한다.
👉 func main( ) { }
main( ) 함수를 선언하는 구문이다. main( ) 함수는 프로그램 진입점(Entry Point) 함수이다. 그래서 프로그램은 항상 main( ) 함수에서 시작된다. 다시말해, Go 언어로 만든 모든 프로그램은 main( ) 함수부터 시작되고 main( ) 함수가 종료되면 프로그램이 종료된다. 프로그램의 시작과 끝이 main( ) 함수임을 기억하자.
3. Go 모듈 생성
Go 1.16 버전 이후로 Go 모듈이 기본으로 적용되기 시작했다. 따라서 모든 Go 코드는 빌드하기 전에 모듈을 생성해줘야 한다. 모듈 생성은 go mod init 명령어로 실행한다. go mod init 뒤에는 모듈의 이름을 적어주면 된다. 여기서는 폴더명과 같은 Go_Study/hello를 모듈의 이름으로 하였다.
go mod init으로 Go 모듈을 생성하면 go.mod 파일이 생성된다. go.mod 파일에는 모듈명과 Go 버전, 필요한 패키지 목록 정보가 담겨있다.
4. 빌드
Go 언어는 정적 컴파일 언어이기 때문에 컴파일 과정을 거쳐 실행파일을 미리 만들어야만 한다. go build 명령어를 이용하면 Go 코드를 기계어로 변환하여 실행 파일을 만들게 된다. GOOS와 GOARCH 환경변수를 설정해서 다른 운영체제와 아키텍처에서 실행되는 실행 파일을 만들 수도 있다.
예를 들어 AMD64 계열 칩셋을 사용하는 리눅스 실행파일을 만들고자 할 때 다음과 같이 옵션을 주면 된다.
GOOS=linux GOARCH=amd64 go build
현재 시스템에서 실행되는 파일을 만들고 싶을 때는 그냥 go build 명령어만 입력하면 된다. 아래와 같이 go mod init 에서 작성한 모듈명으로 실행파일이 생성되는 것을 확인할 수 있다.
5. 실행
VSCode 터미널에 ./hello.exe를 입력하고 실행 파일을 실행해보면 "Hello Go"가 출력되는 것을 확인할 수 있다. ( MacOS의 경우 .exe 없이 ./hello 만 입력해 실행파일을 실행할 수 있다. )
Go 언어의 특징
- Go는 정적 컴파일 언어이다. 컴파일 과정을 거쳐 실행 파일을 미리 만들어야 하지만 실행 속도가 빠르다는 장점이 있다.
- Go는 강 타입 언어이다. 다른 강 타입 언어에서 지원하는 자동 타입 변환까지도 지원하지 않는 최강 타입 언어이다. 그렇기에 사용하기 까다롭지만 타입이 달라서 발생할 수 있는 문제점이 전혀 발생하지 않는다.
- Go 언어는 가비지 컬렉터를 제공한다. 그래서 자동으로 불필요한 메모리를 해제해준다.
Reference
- Tucker의 Go 언어 프로그래밍
'Go' 카테고리의 다른 글
Golang - 변수 (0) | 2024.12.09 |
---|