[Go] 프로그래밍 특성 및 간단한 프로그램 작성

2022. 12. 12. 11:36Go

Go 프로그래밍 언어의 특성
Go는 전통적인 컴파일, 링크 모델을 따르는 범용 프로그래밍 언어이다. Go는 일차적으로 시스템 프로그래밍을 위해 개발되었으며, C++, Java, Python의 장점들을 뽑아 만들어졌다. C++와 같이 Go는 컴파일러를 통해 컴파일되며, 정적 타입 (Statically Typed)의 언어이다. 또한 Java와 같이 Go는 Garbage Collection 기능을 제공한다. Go는 단순하고 간결한 프로그래밍 언어를 지향하였는데, Java의 절반에 해당하는 25개의 키워드만으로 프로그래밍이 가능하게 하였다. 마지막으로 Go의 큰 특징으로 Go는 Communicating Sequential Processes (CSP) 스타일의 Concurrent 프로그래밍을 지원한다.
GO 설치

Go 프로그래밍을 시작하기 위해 Go 공식 웹사이트인 https://go.dev/dl/ 에서 해당 OS 버젼의 Go를 다운로드하여 설치한다. Go는 Windows, Linux, Mac OS X 에서 사용할 수 있다.

윈도우즈에 Go를 설치하기 위해서는 MSI (*.msi) 파일을 다운받아 실행하면 되는데, Go는 디폴트로 C:\go 폴더에 설치되며, MSI가 C:\go\bin을 PATH 환경변수를 추가한다. (주: 여기서는 별도의 언급이 없는 한 Windows에 설치된 Go를 기준으로 설명)

Go를 설치하고 해당 설치 디렉토리 밑에 bin 디렉토리를 보면 go.exe 파일이 있는데, 이 컴파일러로 go 프로그램을 컴파일하거나 실행할 수 있다. Go 프로그램은 파일 확장자 .go 를 갖는다.

Workspace 폴더

Go 프로그래밍을 위해 일반적으로 Workspace 폴더 (작업 폴더)를 생성하는데, 이 폴더 안에는 3개의 서브디렉토리 (bin, pkg, src)를 생성한다. 예를 들어, C:\GoApp 디렉토리를 Workspace 폴더로 정했다면, C:\GoApp 안에 bin, pkg, src 서브 폴더를 만들어 준다.

Workspace 폴더를 생성한 후, GOPATH 환경변수에 이 Workspace 폴더 경로를 추가해 준다 (SET GOPATH=C:\GoApp 처럼 세션별로 할 수 있으나, 주로 시스템 설정에서 시스템 환경변수 혹은 사용자 환경변수로 지정한다).
GOPATH는 하나 이상의 경로를 지정할 수 있다. 즉, 여러 Workspace가 있는 경우, 이들 경로를 계속 추가할 수 있다.

간단한 Hello World 프로그램

새 프로그래밍 언어를 배울 때, 가장 먼저 만들어 보는 Hello World 프로그램을 작성해 보자. 여기서는 vsCode 에디터를 사용해서 hello.go를 만들고 실행하는 방법을 살펴본다.

  1. vsCode를 실행한다
  2. File -> Open Folder 에서 작업 폴더를 연다. 여기서는 이미 만들어진 C:\GoApp을 사용하지만, 프로젝트마다 새로운 작업 폴더를 만들어 사용할 수 있다. 작업폴더는 일반적으로 그 작업폴더 밑에 bin, pkg, src 라는 3개의 폴더를 생성하고, 소스코드는 src 폴더 밑에 둔다.
package main

// 입출력 담당 패키지 C언어의 stdio 헤더와 유사한 기능
// 출력 함수
// Println("Hello, Byeongmun") -> 쉼표로 구분지어 여러 인자를 받을 수 있음 마지막에 자동 개행
// Print("Hello, Byeongmun") -> 쉼표로 구분된 인자간에 띄어쓰기를 하지 않으며 마지막에 자동 개행 안함
// Printf("Hello, Byeongmun") -> %Format(형식지정자)를 사용할 수 있음

// import
// 여러 패키지를 import할 때 소괄호에 감싸 한번에 처리 가능
// import (
// 	"fmt"
// 	"math"
// )

// export
// export를 통해 캡슐화(객체지향 프로그래밍(OOP)의 메커니즘으로 접근 제한을 통해 데이터를 관리하는 방법)를 지원
// Go 언어에서는 익스포트(Export)되는 데이터(변수, 상수, 메서드 등)의 
// 첫 글자가 대문자로 시작하면 외부에서 접근이 가능하고 소문자일 경우 접근이 불가능
import "fmt"

func main() {
	fmt.Println("Hello World")
}

터미널 창에서 Go 프로그램을 실행한다.

go run src/hello.go