본문 바로가기
잡담

구글의 Go에 대하여.

by PrintedLove 2020. 6. 26.

학교 과제로 제출한 내용을 올린다.

 

 

조사하기로 선정한 프로그래밍 언어는 구글의 'Go'이다. IT공룡이라고 불리는 구글이 개발했다는 것에 흥미를 느껴 조사해보기로 마음 먹었다.

 

 Go는 2009년 구글이 개발한 언어로, 2007년 조버드 그리즈머 외 두 사람이 인페르노 분산 운영체제와 관련된 작업을 하다 시작되었다. Go는 초기에는 실무적인 소프트웨어를 만들기에는 준비가 덜 된 상태였지만, 2010년에 와서는 롭 파이크가 구글에서 실제로 사용되고 있는 부분이 있다고 공개적으로 알렸다.

 

 

 

 위 사진은 Go와 C++, Java를 비교한 표이다(출처: 한국 데이터 산업 진흥원). Go는 최신언어임에도 C++과 Java에 비해서 제공하는 기능들이 훨씬 적다.

 무려 Overloading(중복 정의)을 지원하지 않는다. 거기에 심지어 Go는 Generic 기능을 지원하지 않는다. 즉 사용자가 일일이 각 타입별로 구현을 해야된다...

 

 그러나 어째서 사람들은 Go를 사용하는 걸까?

 

 Go는 컴파일러를 사용하는 번역기법 언어이다. 하지만 컴파일 속도가 엄청나게 빨라 인터프리터 처럼 사용할 수 있다. 또한 문법이 간단해 배우기 쉽다.

 C도 쉬운 언어에 속하는데, Go는 파이썬 급으로 쉽다.

 

 

 Go의 문법체계는 대체로 C와 비슷하다.

 중괄호로 코드 블록들을 감싸고 if, for, switch 등의 일반적인 제어구조를 가지고 있다. C와 다르게, 세미콜론은 필수가 아니다. C처럼 컴파일시 정적 바인딩이 일어난다.

 

 Go는 그리 좋지 않은 하드웨어에서도 빠르게 컴파일될 수 있도록 디자인되었다. 가비지 컬렉션을 지원하며, 멀티 쓰레딩, 병렬 컴퓨팅, 비동기성 입출력같은 동시성 프로그램을 쉽게 만들 수 있다.

 

 Go는 패러다임을 명확히 정의하기 힘든 언어라고 한다. 위키에서는 동시성 프로그래밍 언어로 구분하지만, 공식적으로 함수가 제공되는 언어가 아니여서 무척 애매하다.

 

 

 Go의 변수 선언은 var [이름] [타입] = [표현식]으로 한다. [이름] := [표현식] 으로 짧은 선언이 가능하다.

 이때 타입은 표현식의 타입에 의해 결정된다.

 

 new 라는 내장 함수를 표현식에 사용해 이름 없는 변수를 선언할 수 있다. 표현식에 쓸 수 있다는 점 외에는 일반 지역 변수와 같다.

 

 Go에서는 flag패키지를 사용해 포인터를 사용할 수 있다. C처럼 &기호로 선언 가능하다. 포인터의 제로 값은 타입과 무관하게 nil이다.

 

 패키지 수준 변수의 수명은 프로그램의 전체 실행 시간과 같다. 지역 변수의 수명은 동적이다.

 Go는 변수의 수명을 해당 변수에 '접근할 수 있는지에 대한 여부'로 결정한다.

 

 

 

 

 Go의 자료형은 다음과 같다.

자료형

저장 범위

설명

uint8

0 ~255

부호 없는 8비트 정수형

uint16

0 ~ 65,535

부호 없는 16비트 정수형

uint32

0 ~ 4,294,967,295

부호 없는 32비트 정수형

uint64

0 ~ 18,446,744,073,709,551,615

부호 없는 64비트 정수형

uint

 

32비트 시스템에서는 uint32, 64비트에서는 uint64

int8

-128 ~ 127

부호 있는 8비트 정수형

int16

-32,768 ~ 32,767

부호 있는 16비트 정수형

int32

~2,147,483,648 ~ 2,147,483,647

부호 있는 32비트 정수형

int64

~9,233,372,036,854,775,808 ~ 9,223,372,036,854,775,807

부호 있는 64비트 정수형

int

 

32비트 시스템에서는 int32, 64비트 시스템에서는 int64

float32

 

IEEE-754 32비트 부동소수점, 7자리 정밀도

float64

 

IEEE-754 64비트 부동소수점, 12자리 정밀도

complex64

 

float32 크기의 실수부와 허수부로 구성된 복소수

complex128

 

float64 크기의 실수부와 허수부로 구성된 복소수

uintptr

 

uint와 같은 크기를 같는 포인터형

bool

 

참, 거짓을 표현하기 위한 자료형

byte

 

8비트 자료형

rune

 

유니코드 저장을 위한 자료형, 크기는 int 32와 동일

string

 

문자열 저장을 위한 자료형

 

 

 

 다음은 Go의 연산자이다.

 C언어와 거의 같다는 것을 알 수 있다.

 

 - 대입, 변수 선언 및 대입 [ =, := ]

 - 사칙연산, 나머지 [ +, -, *, /, % ]

 - 비트연산 (AND, OR, XOR, AND NOT) [ &, |, ^, &^, &= ]

 - 비트 이동 (왼쪽, 오른쪽, 반전) [ <<, >>, ^ ]

 - 비교 (같다, 다르다, 적다, 많다) [ ==, !=, <, > ]

 - 논리 (AND, OR, NOT) [ &&, ||, ! ]

 - 증감 [ ++, -- ]

 - 기타 (참조, 역참조, 채널수신) [ &, *, <- ]

 

 Go 언어의 매개변수 전달 기법은 C처럼 '값 호출'이 기본이다. 함수를 호출할 때 매개변수 값을 복사하여 함수 내부로 전달한다. 때문에 함수 내부에서는 매개변수의 본래 값을 변경할 수 없다.

 

 물론 C 언어처럼 *연산자를 사용해 참조 호출이 가능하다.

 

 

 

(출처1: 위키백과)

(출처2: 한국 데이터 산업 진흥원)

(출처3: Go 공식 웹사이트)

 

댓글