본문 바로가기
IT/golang

go언어 개요와 배경 설명

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

 

golang/go언어 개요

 

최근에 golang 관련하여 keti에서 진행하는 수업을 들었다.
여러 언어들을 다룰 수 있지만 지금까지의 개발언어와 golang 은 같은 듯 다른 듯 많이 신선했다. 그래서 앞으로 시간이 되고 체력이 허락하면 이따금씩 정리를 해볼까 한다.

# 배경
 1) golang은 구글이 2009년에 개발한 프로그래밍 언어로 빠른속도, 안정성, 간단한 문법을 특징으로 한다.

 2)
C언어 기반 언어지만 python, js, php 인터프리터 언어와 비슷한 문법과 서술적 문장(syntax) 구성을 사용한다.  
   
하지만 golang은 컴파일러를 사용하는 컴파일 언어이다.
 
# 특징
 1) C언어와 유사한 점이 많지만 do, do while, while, for 의 여러 반복문을 for 하나로 간략화 하는 등
   
전체 키워드가 25개로 구성하여 간편한 프로그램 언어를 지향하고 컴파일 속도수행 속도가 빠른 것 장점.

 2)
빠른 성능과 대용량 데이터 처리가 필요한 서비스에서 많이 사용 되며 알려진 상용 서비스는 다음과 같다.
 
 - docker, etherium, mongoDB, netflex, openshift, uber, hyperledger fabric, cloudflare, google, couchbase

 3)
기능의 대표적 특징은 아래와 같다.
  -
컴파일 시 자료형이 결정되는 정적 타입(static) 언어, 그로 인해 동작 속도가 동적타입 형태보다 빠름
  -
자체 멀티스레딩인 go routine, 논리적 cpu 사용 지원을 활용한 손쉬운 멀티프로세싱 제공(Concurrency)
  -
시스템/백엔드/프론트엔드 까지 golang 하나로 아우르는 풀스택 제공
  -
단순한 언어구조, 자동화된 메모리관리(GC), 멀티스레딩과 안전한 동기처리(go channel)
 
 4)
많은 장점과 특징들이 있지만 go codeUTF-8 문자를 사용하여 문자열의 대용량 처리가 특화 되어있다.
    
이는 한국어, 중국어, 일본어 같은 언어들도 바이트 단위가 아닌 룬(rune)이라는 단위로 편리하게 사용 가능하다.
 
# golang 홈페이지에서 go의 모든 것이 가능하다
 - 접속 URL : https://go.dev
 1)
golang 다운로드
 2)
golang 튜토리얼, 프로그래밍 가이드
 3)
golang packages 검색 (github 등 외부 package 포함)
 4)
golang playground, 온라인 컴파일러를 통한 경험 가능
 
# 공식 지원 운영 체제
 - windows 7 or later
 - Apple macOS 10.13 or later
 - Linux 2.6.23 or later
 *
공식적으로 제공되진 않으나 임베디드용인 tinyGo 존재 (https://tinygo.org)
 
# 개발 환경 구성
 - https://go.dev/dl/ go 1.17.4 최신 버전 다운로드 및 설치
 - vs code
extension 에서 Go Language support 설치

 

# go 프로그램의 구조
 - gopackage 단위로 구성된다. C++ namespace 와 비슷한 개념이다.
 - package
명과 디렉토리명은 같아야 한다.
 -
파일 분리 시 package main 에서 시작(entry)한다. import 는 각각의 파일에서 명세한다.
 - import
C/C++의 라이브러리와 비슷한 개념이다.
 -
프로그램의 시작점(entry)func main() 이다
 -
함수에서 중괄호 “{“는 반드시 함수 선언과 같은 줄에 있어야 한다.
 -
함수의 앞이 소문자면 package 내에서만(private), 대문자면 packge 외에도(public) 사용 가능하다.
 - return
은 복수개가 가능하다. (e.g. return a, b)
 - git
code 내에서 직접 pakcage access가 가능하고 배포가 쉽다.
 - go
는 클래스가 존재하지 않는다. struct 를 사용하여 객체향 코드를 구현할 수 있다.
   C
에서 함수 포인터로 구조체 연결하여 마치 클래스 처럼 사용하듯.
 - C
에서 사용하는 포인터(*)와 주소 지시자(&)go 에서도 동일한 개념으로 사용한다.
golang 문법 예제, 간결한 문장구성이 장점이다.

 

 

댓글