[Go] 가볍게 Go 입문하기 ❶ – Hello Go World

Go 입문자를 위한 가볍게 Go 입문하기를 준비했습니다. Go 언어 기본 문법을 알아봅시다. 기초가 튼튼해야 견고한 건축물을 지을 수 있듯 기본 문법을 제대로 익혀야 훌륭한 코드를 짤 수 있습니다. ‘Hello Go World’, ‘변수’, ‘fmt 패키지를 이용한 텍스트 입출력’, ‘연산자’, ‘함수’까지 총 5편으로 정리했습니다.

Hello Go World

Go 언어의 역사와 특징을 살펴보고, Hello Go World 코드를 뜯어보겠습니다.

 

Go 언어 소개

Go 언어는 로버트 그리스머, 롭 파이크, 켄 톰슨 주축하에 구글에서 만든 오픈소스 프로그래밍 언어입니다. Golang, 고랭으로 쓰기도 합니다. Go 언어는 심플한 문법 구조를 가지고 있어서 누구나 배우기 쉽고 매우 강력한 성능을 자랑합니다. 적은 코딩으로 빠르고 강력한 성능을 낼 수 있어 2020년 스택오버플로에서 조사한 바에 따르면 개발자가 사랑하는 언어 5위를 기록했습니다. 같은 해 미국에서는 펄(Perl), 스칼라(Scala) 다음으로 많은 연봉을 받는 인기 언어입니다.

 

Go 장점

  • Go 언어는 매우 심플한 문법 구조를 가지고 있어서 쉽게 배울 수 있습니다.
  • Go 언어는 모던 프로그래밍 기법을 다수 제공하면서도 매우 강력한 성능을 자랑합니다.
  • 특히 백엔드 서버와 시스템 개발에 적합하고 강력한 동시성 프로그래밍을 지원합니다.

 

Go가 유용한 곳

  • Go 언어는 범용 언어이기 때문에 어떤 용도로도 사용될 수 있지만 주로 백엔드 서버와 시스템 프로그래밍에 사용됩니다. 강력한 성능을 자랑하기 때문입니다.

 

1. Go 역사

Go 언어는 2009년 발표된 오픈 소스 프로그래밍 언어입니다. 무료로 사용할 수 있고, 누구나 내부 구조를 살펴볼 수 있고, 누구나 Go 언어 발전에 이바지할 수 있습니다.

2007년에 개발을 시작해 2009년 11월 10일 세상에 공개됐습니다. 현재 Go 언어는 지속적인 업데이트를 하고 있고 출간 시점 기준 1.16 버전까지 공개됐습니다. 홈페이지에서 최신 배포판을 다운받을 수 있고 다양한 공식 문서를 볼 수 있습니다. 간단한 코드도 돌려볼 수 있습니다. 온라인에서 Go 언어를 작성하고 테스트할 수 있는 사이트도 제공합니다.

구글에서 Go를 검색할 때 키워드에 golang을 추가하면 Go 언어 관련 내용을 검색할 수 있습니다.

오픈 소스 허브인 깃허브에 올라간 소스 코드 중 가장 많이 사용되는 언어 4위에 랭크될 만큼 많이 사용됩니다. 매년 순위가 상승 중입니다.

 

출처: https://madnight.github.io/githut/#/pull_requests/2020/3

 

2. Go 언어 특징

Go 언어의 각 특징을 표로 요약해 살펴보겠습니다.

 

한눈에 보는 모던 언어로서 Go 언어 특징

 

3. 코드가 실행되기까지

코드가 프로그램이 되어 실행되기까지 다음과 같이 5단계를 거쳐야 합니다.

  1. 폴더 생성
  2. .go 파일 생성 및 작성
  3. Go 모듈 생성
  4. 빌드
  5. 실행

각 단계가 하는 일을 간단히 알아보겠습니다.

 

➊ 폴더 생성

Go 언어에서 모든 코드는 패키지 단위로 작성됩니다. 같은 폴더에 위치한 .go 파일은 모두 같은 패키지에 포함되고, 패키지명으로 폴더명을 사용합니다.

예를 들어 goproject/hello 폴더를 생성하고 hello 폴더 아래 여러 .go 파일을 생성했다면, 모두 같은 hello 패키지에 포함됩니다. 그렇다면 goproject/hello 아래 extra 폴더를 만들고, extra 폴더 아래 또 .go 파일들을 생성하면 어떻게 될까요? hello와 extra 폴더는 같은 폴더가 아니기 때문에 extra 아래 있는 .go 파일들은 hello 패키지가 아닌 extra 패키지에 포함됩니다.

 

 

➋ .go 파일 생성 및 작성

코딩은 Go 문법을 사용해서 Go 코드를 만드는 과정입니다. 확장자는 반드시 .go로 끝나야 합니다.

 

➌ Go 모듈 생성

Go 1.16 버전 이후로 Go 모듈이 기본으로 적용됩니다. 따라서 모든 Go 코드는 빌드하기 전에 모듈을 생성해야 합니다.

모듈 생성은 go mod init 명령으로 실행합니다. go mod init 뒤에 모듈 이름을 적어주면 됩니다. 여기서는 폴더명과 같은 goproject/hello를 넣어줍니다.

 

go mod init goproject/hello

 

Go 모듈을 생성하면 go.mod 파일이 생성됩니다. go.mod 파일에는 모듈명과 Go 버전, 필요한 패키지 목록 정보가 담겨 있습니다. 자세한 사항은 16장에서 다루겠습니다.

 

➍ 빌드

go build 명령은 Go 코드를 기계어로 변환하여 실행 파일을 만듭니다. GOOS와 GOARCH 환경변수를 조정해서 다른 운영체제와 아키텍처에서 실행되는 실행 파일을 만들 수 있습니다. 터미널에서 go tool dist list 명령을 실행하면 가능한 운영체제와 아키텍처 목록을 볼 수 있습니다.

아래는 빌드 가능한 운영체제와 아키텍처 목록입니다.

 

 

예를 들어 AMD64 계열 칩셋을 사용하는 리눅스 실행 파일을 만들 때는 다음과 같이 옵션을 주면 됩니다.

 

GOOS=linux GOARCH=amd64 go build

 

현재 시스템에서 실행되는 실행 파일을 만들 때는 그냥 go build만 하면 됩니다.

 

➎ 실행

이렇게 만들어진 실행 파일을 명령어로 실행하면 됩니다.

코드가 실행되는 과정을 알아봤습니다. 그럼 코드가 어떻게 생겼는지 알아볼 차례입니다.

4. Hello Go World 코드 뜯어보기

“Hello Go World”를 출력하는 코드를 실행은 해봤지만, 아직 어떤 의미인지 알지 못합니다. 코드 한 줄 한 줄이 의미하는 바를 알아봅시다.

 

package main                    // ❶
import "fmt"                    // ❷

func main() {                   // ❸
  // Hello Go World 출력         // ❹
  fmt.Println("Hello Go World") // ❺
}                               // ❻

 

➊ package main

패키지 선언은 이 코드가 어떤 패키지에 속하는지 알려줍니다. 패키지는 코드 묶음이고 여러 기능을 제공합니다. Go 언어의 모든 코드는 반드시 패키지 선언으로 시작해야 합니다. ❶ package main은 main 패키지에 속한 코드임을 컴파일러에게 알려줍니다. main 패키지는 프로그램 시작점을 포함하는 특별한 패키지입니다. main() 함수가 없는 패키지는 패키지 이름으로 main을 쓸 수 없습니다. main() 함수가 없기 때문에 실행 파일을 만들 수는 없고, 다른 패키지에서 외부 패키지로 사용됩니다.

‘Go 언어는 패키지 선언으로 시작되어야 한다’는 점과 ‘package main은 프로그램 시작점이 있는 패키지다’라는 점만 기억하면 됩니다.

 

➋ import “fmt”

fmt 패키지를 가져옵니다. 특정 패키지에서 제공하는 기능을 쓰고 싶을 때는 import로 해당 패키지를 불러와야 합니다. fmt 패키지는 표준 입출력을 다루는 내장 패키지입니다. 표준 입출력으로 텍스트를 출력하거나 입력받을 때 사용합니다.

 

➌ func main() {

main() 함수를 선언하고 중괄호 {로 본문의 시작을 알립니다. main() 함수는 프로그램 진입점 함수입니다. 그래서 프로그램은 항상 main() 함수에서 시작됩니다. 즉 Go 언어로 만든 모든 프로그램은 main() 함수부터 시작되고 main() 함수가 종료되면 프로그램이 종료됩니다. 즉, 프로그램의 시작과 끝이 main() 함수입니다.

 

➍ // Hello Go World 출력

//은 한 줄 주석 예약어입니다. //와 그 오른쪽 내용은 주석 처리가 됩니다. 주석문은 아무런 동작을 하지 않습니다. 코드를 읽는 사람에게 정보를 전달하려는 목적으로 사용됩니다. 예를 들면 다음과 같습니다.

 

// 이 프로그램은 콘솔에 문자열을 출력하는 프로그램입니다.
// 이 줄은 주석이므로 아무런 동작도 하지 않습니다.
func main() {

 

주석은 주로 프로그램 기능, 설계 목적, 주의사항, 코드 작성자의 의도 등을 나타내는 데 사용됩니다. Go 언어에서는 외부로 공개되어 다른 프로그램에서 쓰이는 함수 앞에 함수명으로 시작하는 주석 달아 함수를 설명하도록 코딩 규약으로 권장하고 있습니다.

 

// CalculateWage는 일한 시간과 성과에 따라 보수를 결정하는 함수입니다.
// workTime은 주 52시간을 넘을 수 없고
// successRate는 백분율로 0~100 사이의 값을 입력해야 합니다.
// 반환값은 만 원 단위 실수로 표시됩니다. 2.5일 경우 2만5천 원이 됩니다.
func CalculateWage(workTime int, successRate float64) float64 {

 

외부로 공개되는 함수의 주석 시작에 “// CalculateWage …”처럼 함수명을 써주고 그 뒤에 설명을 쓰면 됩니다.

주석은 두 종류가 있습니다. 가장 많이 쓰는 방식은 ❶ 한 줄 주석으로 //를 사용합니다. // 오른쪽 내용이 모두 주석입니다. ❷ 두 번째는 /* /을 사용하는 여러 줄 주석입니다. / 로 주석 시작을, /로 끝을 알립니다. 주석 기호를 포함해 / */ 사이에 있는 모든 내용이 주석입니다.

// ❶ 한 줄 주석입니다.
/* ❷ 여러 줄 주석입니다.
   블록 안은 모두 주석이므로 아무런 동작을 하지 않습니다. */
func main() {

 

참고로 외부로 공개되는 함수나 객체에 주석을 달고 godoc 프로그램을 실행하면 해당 주석들을 이용해서 HTML 문서를 자동으로 생성해줍니다. Go 언어의 표준 패키지 문서 역시 godoc을 사용해서 작성됐습니다.

➎ fmt.Println(“Hello Go World”)

fmt.Println()는 표준 출력으로 문자열을 출력하는 함수입니다. fmt.Println(“Hello Go World”)는 Hello Go World를 출력합니다. 표준 출력이란 터미널 화면을 말합니다.

➏ }

}는 코드 블록을 종료합니다. 여기에서는 func main() {에서 시작한 main() 함수 블록을 종료하는 용도로 썼습니다. main() 함수가 종료되기 때문에 프로그램도 종료됩니다. 기억하세요. 프로그램은 main() 함수에서 시작해서 main() 함수에서 종료됩니다.

 

5. 핵심 요약

  1. Go 언어는 2009년 공개됐고 지속적으로 업데이트되고 있습니다.
  2. 모든 Go 코드는 패키지 선언으로 시작합니다.
  3. 프로그램 시작을 포함한 패키지에는 반드시 main() 함수가 있어야 합니다.
  4. fmt 패키지는 표준 입출력 기능을 제공합니다.
  5. 모든 Go 프로그램은 main() 함수에서 시작해서 종료됩니다.
  6. 주석은 아무런 동작을 하지 않고 코드를 읽는 사람에게 정보를 제공합니다.

 

다음편에서 계속 됩니다.

WRITER

공봉식

13년 차 게임 서버 프로그래머로 다양한 장르의 온라인 게임을 개발했습니다. 넥슨과 네오위즈를 거쳐서 현재는 EA 캐나다에서 근무 중입니다. 「Tucker Programming」 유튜브 채널을 운영합니다.

Leave a Reply

©2020 GoldenRabbit. All rights reserved.
상호명 : 골든래빗 주식회사
(04051) 서울특별시 마포구 양화로 186, 5층 512호, 514호 (동교동, LC타워)
TEL : 0505-398-0505 / FAX : 0505-537-0505
대표이사 : 최현우
사업자등록번호 : 475-87-01581
통신판매업신고 : 2023-서울마포-2391호
master@goldenrabbit.co.kr
개인정보처리방침
배송/반품/환불/교환 안내