본문 바로가기
IT 초보코딩의 세계/Go 언어

Go 언어란?

by 조이럭키7 2023. 3. 23.
반응형

Go언어

  • 200911월에 구글에서 처음 발표된 후 20123월에 정식 발표된 프로그래밍 언어
  • 검색이 불편한 경우가 있어서 보통 Golang으로 검색하거나 발음하는 것이 수월
  • Go 언어 사용자들을 고퍼(Gopher)라고 부르며 고퍼들을 위한 연례행사인 고퍼콘(Gophercon)이 세계 각국에서 매년 열리고 있음
  • 컴파일 언어이지만 컴파일러의 컴파일 속도가 매우 빨라 인터프리터 언어처럼 사용 가능
  • GoGoRoutine 이라는 비동기 메커니즘을 제공

◆ 비동기 메커니즘은 Erlang에서 영향을 받은 것으로 각각의 고루틴은 병렬로 동작하며 메시지 채널을 통해 값을 주고 받음
◆ 고루틴을 사용하면 이벤트 처리, 병렬 프로그래밍 등이 간단해 짐
◆ 병렬화된 고루틴의 동기화 문제는 프로그래머가 다뤄야 하며 동기화를 무시할 경우 프로그램이 비정상 종료될 수도 있는데 예를 들어 부모 루틴이 자식 루틴보다 먼저 끝나버리면 자식 루틴은 OS에 의해 메모리에서 강제로 사출되어 버리는데 그래도 동기화 방법은 기존 멀티 스레드 응용프로그램에 비해 매우 간단한데 단순히 고루틴으로부터 반환값을 받는 코드를 메인 스레드에 추가하면 됨
◆ 고루틴은 멀티스레드 메커니즘이지만 자체적인 스케줄러에 의해 관리되는 경량 스레드이며 OS에서 관리하는 경량 스레드보다 더 경량이기 때문에 고루틴은 CPU 코어수와 무관하게 수백, 수천의 고루틴을 작성해도 성능에 문제가 생기지 않음
  • Go는 바이너리 컴파일러이므로 서로 다른 머신 플랫폼들을 타겟으로 배포해야 할 경우 환경 변수(GOOSGOARCH ) 그에 맞게 설정한 후 컴파일해서 여러 벌의 배포판을 만들어야 함
  • Go는 명시하고 있지 않지만 단순함과 실용성을 지향하는 언어로 keyword25개밖에 되지 않고 문법 또한 간결해 입문이 쉬운 편
  • 메모리 관리가 쉬움
  • 기본 라이브러리가 많이 제공됨
  • 가상화 컨테이너인 Docker 개발에 사용
  • 클라우드 환경을 위한 오픈 소스 프로젝트는 상당수가 Go 언어로 작성되어 있는데 대표적인 프로젝트가 구글의 컨테이너 관리 시스템인 Kubernetes
  • 클라우드, 웹 서비스, 분산 처리, 서버 애플리케이션 배포 시스템. 데이터베이스 등 다양한 분야에서 Go 언어를 프로젝트 언어로 선택하는 경우가 증가하고 있음

그래서 Go 의 단점은?

  • 바이트 코드를 생성하는 언어가 아니므로 바이너리만 배포할 경우 C/C++ 프로그램이 그렇듯 해당 타깃 머신에 맞춰서 각각 컴파일해야 하는데 다중 플랫폼을 지원하려면 소스 코드를 같이 배포해야 함
  • Go 언어의 설계 지향점은 시스템 프로그래밍 언어였지만 가비지 컬렉션의 지원이나 제네릭의 부재로 인해 박싱/언박싱이 불필요하게 많이 일어나는 등 C/C++을 대체할 수 있는 언어는 아니라는 것에 합의가 이루어지고 있는 상황인데 실제로 고성능 연산에 사용하기에는 C/C++에 비해 느리며 저수준 시스템 개발에서는 가비지 컬렉션과 고루틴을 지원하기 위한 무거운 런타임 등으로 인해 사용이 불가능에 가깝기 때문에 대체로 개발 속도와 실행 속도, 병행성 사이의 적정 지점이 필요한 서버 애플리케이션 개발에 많이 사용
  • 현대 프로그래밍 언어 연구의 성과를 일절 무시한 언어 설계 부분으로 많은 종류의 프로그램 버그는 프로그래밍 언어 차원에서 원천적으로 차단될 수 있으며 프로그래밍 언어 연구자들은 쓰기 쉬우면서도 최대한 많은 버그를 컴파일 시점에 잡을 수 있는 타입 시스템을 만드는 데 많은 노력을 기울이고 있지만 이런 노력들이 무색하게 Go에서는 널 포인터나 안전하지 않은 타입 캐스팅의 유발 등 수 많은 버그의 원천들에 전혀 손을 대지 않음
  • 단순성을 중시하는 Go철학상 최첨단 연구 성과들을 즉시 도입하는 데에는 무리가 있겠지만 3~40년 전의 연구를 기반으로 최근 업계에서 당연하게 여겨지는 원칙들조차 전혀 고려하지 않았다는 것은 수많은 사람들에 의해 비판받았는데 구글은 일반화(제네릭) 프로그래밍을 지원하면 코드가 더 간결해지지만 Go는 지금도 코드가 긴 편이 아니고, 컴파일 속도와 실행 속도가 느려지기 때문에 아직 지원하지 않는다고 밝혔으나 20222월에 릴리즈1.18 부터 일반화 프로그래밍을 지원

Go 를 시작하기전에...

※ 설치방법으로

https://go.dev/dl

 

※ 간단한 개발환경으로는 

 Go Playground: https://go.dev/play/

위와 같이 되겠고 이제 로컬에서 실행하는 방법으로 아래와 같이 진행이 된다.

Workspace 설정

    ◆ Workspace 로 사용할 디렉토리 생성

    ◆ 생성한 디렉토리 안에 src, pkg, bin 디렉토리를 생성

          ▲ src: 소스 코드가 저장될 디렉토리

          ▲ pkg: 컴파일 된 패키지 파일이 저장되는 디렉토리

          ▲ bin: 바이너리 코드 저장

    ◆ 환경 변수 설정: https://github.com/golang/go/wiki/SettingGOPATH

 

SettingGOPATH

The Go programming language. Contribute to golang/go development by creating an account on GitHub.

github.com

          ▲ Mac, Linux

              → 설정: export GOPATH=워크스페이스경로

              → 확인: go env

          ▲ Windows

              → GOPATH 환경 변수를 생성하고 워크스페이스 경로를 추가

 

여기까지 마쳤으면 간단한 코드 모든 언어의 처음시작하면 Hello Go 를 띄워보는 코드를 작성해보자.


workspace 의 src 디렉토리 안에 작성 – main/joylucky.go
package main
import "fmt"
func main() {
  fmt.Println("Hello GO")
}

▶ 코드를 실행하고자 할때 컴파일 방법으로

      → 소스 코드 컴파일: go build 소스파일경로

      → 터미널에서 소스 코드가 있는 곳으로 이동한 후 입력

           first % go build joylucky.go

           first % go build

컴파일 이후 실행 방법으로

      →  Linux, Mac

           first % ./joylucky

      →  Window

           first % joylucky

 

이와 같이 진행되며 Go 언어를 위한 가장 기초부분이 되겠다.

반응형

댓글