본문 바로가기
IT/golang

golang/go언어 프로그램의 구조 설명과 예제

by 어느해겨울 2021. 12. 22.

 

golang/go언어 프로그램의 구조

 

go의 구조를 이해할 수 있도록 작은 프로그램을 하나 짜보았다.

package main

import "fmt"

func add(a, b int) int {
	return a + b
}

var a, b int = 1, 2

func main() {
	result := add(a, b)
	fmt.Printf("Result=%d = add(%d + %d)", result, a, b)
}

 

문장 구성의 특이사항으로 line 끝에 ;(semicolon)을 사용하지 않는다. 이는 line의 끝을 알릴 때 사용하지 않고 

line의 구분을 나타낼 때 사용하며 go formatter 가 자동으로 정렬해준다.

ex) var a = 1 int ; var name = "test" string

→ var a = 1

    var name = "test" string

 

 

package

main(entry function) 이 있는 곳을 가리키거나 자신의 파일명을 가리킨다. 이 것을 코드의 모듈화라고 한다.

모듈로 작성된 package 들을 통해 프로그램을 구성한다.

main package는 컴파일러에게 시작을 알리는 프로그램으로 인식되고 그 외에 package는 라이브러리 모듈로 인식된다. 

 

import

다른 package 모듈을 해당 package로 포함한다. 예제에 있는 import "fmt"는 표준 라이브러리 중에서 fmt 패키지를 사용하겠다.라고 선언하는 것이다. C++의 using namespace와 비슷한 거 같다.

 

함수 선언

함수의 선언은 func로 시작되고 func <함수명>([인자]) [리턴 타입] { }으로 구성된다. 

여기서 <>는 mandatory(의무, 필수)를 의미하고 []는 optional(선택)을 의미한다.

위 예제의 add 함수를 보면 정수형 int 변수인 a, b를 인자로 갖는 리턴 타입이 정수형인 함수 add를 선언한다.라고 이해하면 되겠다.

C 스타일로 변경해보면 아래와 같이 될 것이다.

int add(int a, int b) {
	return a + b;
}

a, b int는 a int, b int에서 반복되는 데이터 타입의 선언을 하나로 표현한 것이다. go는 함축적인 표현을 잦게 쓴다.

 

변수 선언

변수의 선언은 var로 시작되고 var <변수명> <데이터 타입> [= 초기값]으로 구성된다.

위 예제에 있는 var a, b int = 1,2를 C 스타일로 변경해보면 아래와 같을 것이다.

int a = 1, b = 2;

 

main 함수

위 예제의 main 함수를 보면 return을 사용하지 않기 때문에 func 선언 시 리턴 타입에 대한 명세를 하지 않았다.

함 수 내에 result := add(a, b)를 보면 생소한 :=라는 표현이 있는데 이것은 대입 연산자라고 한다.

대입 연산자는 변수의 선언과 대입을 동시에 해주며 데이터 타입은 대입하는 값에 따라간다.

즉 add 함수는 return으로 정수형을 반환하기 때문에 result는 add 함수가 반환하는 정수형으로 초기화가 되며

add 함수의 반환 값으로 초기화가 된다.

fmt.Printf는 fmt package 의 Printf 를 사용하는데 함수의 앞글자가 대문자로 시작하면 package에 속한 외부 함수라고 생각하면 된다. 

여기서 사용하는 Printf 는 C에서 사용하는 printf와 비슷하게 변환 출력자 포맷을 사용할 수 있다.

 

실행 결과

3

간단하게 정수 변수 a, b를 선언하여 각 1, 2의 값을 대입하고 더하는 함수를 만들어 출력하는 프로그램이란 것을 알 수 있다.

 

 

댓글