Go Language

Go Language

Go언어에 대해 알아보자.


Go Language에 대한 역사와 무엇인가

인페르노라는 분산 운영체제와 관련된 작업을 하다가 새로운 언어에 대한 스케치를 하면서 구상하여 개발되었습니다.

Go언어는 기본적으로 C언어를 기반으로 C++, Java, Python과 같은 객체 지향 언어들의 장점을 뽑아 만들었습니다. 따라서 절차 지향(함수)의 개념과 객체 지향(클래스, OOP)의 개념이 필요할 것입니다.

Go Language의 활용 분야

Go언어는 구글에서 만든 최신 언어로서 웹 서버, 웹 브라우저, 웹 로봇, 검색 엔진, 컴파일러, 프로그래밍 도구, 운영체제 제작에 쓰이고있습니다! 현재 Go는 점점 더 그 세력을 확장하고 있으며, 몽고DB, 트위치, 우버 등 많은 상용 서비스들이 활용하고 있다고 합니다. 구름의 서비스 인프라 쪽에서도 Go를 사용하고 있죠.

Go Language의 특징

  1. 병행성(concurrency)와 관련된 Go의 구조적인 규칙들(channel과 선택적인 channel input들)은 Tony Hoare의 CSP(커뮤니케이팅 시퀜셜 프로세스)로부터 가져온 것입니다.
  2. 간단하고 간결한 직관적인 언어를 지향함으로써 키워드는 Java에 절반 수준인 25개로 암기해야하는 기능이 적습니다.
  3. Go는 컴파일 언어지만 컴파일러의 컴파일 속도가 매우 빠르기 때문에 인터프리터 언어처럼 쓸 수 있습니다.
  4. 물론 컴파일 언어이기 때문에 타겟 장비에 맞도록 ‘크로스 컴파일’을 해야합니다.
  5. Go언어는 단일 파일로 떨어지는 실행 결과물을 장비에 따로 설치하는 것이 없어 외부 의존성에 대한 버전을 신경쓰지 않아도 돼서 실행이 쉽습니다.
  6. 강력한 내장 라이브러리로 추가 라이브러리나 프레임 워크 없이도 됩니다.
  7. 단일 실행 파일만 있으면 어디서든 동작해 개발자를 위한 개발 툴을 만들 때 좋습니다.
    정적 타입 : 자료형에 형이 정해져 있다
    강타입 : 자료형 변환(타입캐스팅)이 항상 명시되어야 합니다.
    안전성 : 타입 안전성과 메모리 안전성
    병행성 : 스레드를 한 단계 더 추상화한 '고루틴'이라는 개념 사용합니다.
    가비지 컬렉션 : 결과물에 go runtime이 내장되는데 go run time이 메모리를 핸들링
    컴파일 언어 : 인터프리터 언어가 아니지만 근접한 수준의 빠른 컴파일
    포인터는 존재, 하지만 포인터 연산은 없습니다.
    

Go Language와 다른 언어에 다른 점

간단하고 간결한 직관적인 언어를 지향함으로써 객체지향 프로그래밍에서 흔히 알고있는 클래스, 객체, 상속의 개념이 없습니다. 객체지향 언어이지만 아래있는 기능이 없습니다. (제네릭을 추가 예정)

클래스
상속
생성자
final
제네릭

Go Language의 대표적인 프로젝트

도커(Doker), 곡스(Gogs: Go Git Service), 퀴베르네시스(Kubernetes), Etcd & Fleet, 데이스(Deis), 플린(Flynn), 라임(Lime), 싱크띵(Syncthing), 레벨(Revel), 인플럭스DB(InfluxDB) Ravel, Beego, Martini, Gin, GoCraft, Traffic, Gorilla

웹 서버
웹 브라우저
웹 로봇
검색 엔진
컴파일러
프로그래밍 도구
운영체제

앞으로 공부할 사이트 출처

Go 언어 스터디 링크


© 2022. All rights reserved. 신동민의 블로그