갈루아의 반서재

“Hello World” 를 출력하는 간단한 프로그램을 만들자. 

~/src/golang-book/chapter2 라는 폴더를 만들고, 다음의 내용으로 main.go 파일을 만든다.

1
2
3
4
5
6
package main
import "fmt"
 
func main() {
    fmt.Println("Hello World")
}
cs

해당 폴더로 이동하여 다음과 같이 실행한다. 

1
2
3
~/go# cd src/golang-book/chapter2
~/go/src/golang-book/chapter2# go run main.go
Hello World
cs

Hello World가 터미널에 출력되는 걸 확인할 수 있다.

go run 명령은 뒤이어 오는 go 파일을 임시 디렉토리에 실행가능한 형태로 저장한 후 실행하게 된다.


위의 Hello World 소스를 한 줄씩 분석해보자. 

1
package main
cs

라인 1은 일명 패키지 선언으로, 모든 Go 프로그램은 패키지 선언으로 시작해야 한다. 패키지는 코드를 구성하고 재사용하기 위한 하나의 방법론으로, Go 프로그램에는 2가지 - executables 과 libraries - 타입이 있다. 실행파일은 윈도우상에서 .exe 로 끝나는 식으로 터미널에서 바로 실행이 가능한 파일이다. 이에 반해 라이브러리는 다른 프로그램에서 사용가능하도록 모아둔 코드의 집합체라고 할 수 있다. 


2
import "fmt"
cs

import 키워드는 다른 패키지에서 어떻게 코드를 가져오는지를 보여준다. format 의 축약인 fmt 패키지는 인풋과 아웃풋의 포맷을 구현한다. 주의해야할 점은 fmt 를 큰따옴표로 감싼다는 점이다. 큰따옴표(double quotes) 는 “expression” 타입을 가진 “string literal”의 역할을 수행한다. 


4
5
6
func main() {
    fmt.Println("Hello World")
}
cs

함수는 input과 output, 그리고 순서대로 실행되는 명령문이라고 불리는 일련의 step 으로 구성된다. 모든 함수는 func 키워드와 함수의 이름으로 시작되며, 뒤이어오는 ( ) 안에 매개변수 리스트가 들어가고, 마지막 body 는 중괄호(curly braces)으로 감싼다. 위의 함수는 매개변수가 없으며, 하나의 명령문으로 구성된다. 

위의 예에서 명령문인 fmt.Println("Hello World")는 3개의 요소로 구성된다. 하나는 fmt 패키지내의 Println 이라는 함수에 접근해서 새로운 문자열인 Hello World 를 생성하여 해당 문자열을 유일한 인수로 호출하는 것이다. 

Println 함수에 대해 더 알고 싶다면 터미널 상에서 다음과 같이 입력한다. 

1
2
3
4
5
6
7
8
~/go/src/golang-book/chapter2# godoc fmt Println
use 'godoc cmd/fmt' for documentation on the fmt command
 
func Println(a ...interface{}) (n int, err error)
    Println formats using the default formats for its operands and writes to
    standard output. Spaces are always added between operands and a newline
    is appended. It returns the number of bytes written and any write error
    encountered.
cs