golang/go언어 개요
최근에 golang 관련하여 keti에서 진행하는 수업을 들었다.
여러 언어들을 다룰 수 있지만 지금까지의 개발언어와 golang 은 같은 듯 다른 듯 많이 신선했다. 그래서 앞으로 시간이 되고 체력이 허락하면 이따금씩 정리를 해볼까 한다.
# 배경
1) golang은 구글이 2009년에 개발한 프로그래밍 언어로 빠른속도, 안정성, 간단한 문법을 특징으로 한다.
2) C언어 기반 언어지만 python, js, php 등 인터프리터 언어와 비슷한 문법과 서술적 문장(syntax) 구성을 사용한다.
하지만 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 code는 UTF-8 문자를 사용하여 문자열의 대용량 처리가 특화 되어있다.
이는 한국어, 중국어, 일본어 같은 언어들도 바이트 단위가 아닌 룬(rune)이라는 단위로 편리하게 사용 가능하다.
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 code는 UTF-8 문자를 사용하여 문자열의 대용량 처리가 특화 되어있다.
이는 한국어, 중국어, 일본어 같은 언어들도 바이트 단위가 아닌 룬(rune)이라는 단위로 편리하게 사용 가능하다.
# golang 홈페이지에서 go의 모든 것이 가능하다
- 접속 URL : https://go.dev
1) golang 다운로드
2) golang 튜토리얼, 프로그래밍 가이드
3) golang packages 검색 (github 등 외부 package 포함)
4) golang playground, 온라인 컴파일러를 통한 경험 가능
- 접속 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)
- 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 설치
- https://go.dev/dl/ go 1.17.4 최신 버전 다운로드 및 설치
- vs code의 extension 에서 Go Language support 설치
# go 프로그램의 구조
- go는 package 단위로 구성된다. 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 에서도 동일한 개념으로 사용한다.
- go는 package 단위로 구성된다. 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 에서도 동일한 개념으로 사용한다.
'IT > golang' 카테고리의 다른 글
go언어 HTTP get web page 받아오기 예제와 소스코드 (0) | 2021.12.23 |
---|---|
go언어 이미지 수집기(crawler) 소스코드 공유 (0) | 2021.12.23 |
golang/go언어 프로그램의 구조 설명과 예제 (0) | 2021.12.22 |
댓글