GO언어란?
구글에서 2009년 공개된 언어
오픈소스 형태
Go언어는 컴파일 언어 : 다른언어에 비해 컴파일 속도가 매우 빠름
최초로 디자인한 사람 : 로버트 그리즈머, 홉 파이크, 켄 톰슨
켄 톰슨 : B언어, C언어를 개발한 사람
[GO 언어를 사용하는 사람]
Gopher 라고 부름
[대표적인 구글 프로젝트]
Docker
twitch
tensorflow
FCM
등등
[인코딩]
UTF-8 사용
[GO언어는 시스템 프로그래밍을 하기 위해 만들어짐]
성능을 중요 시 함
C언어보다는 느리지만 현대 언어의 장점을 가지며 매우 빠른 특징을 가지고 있음
[호환 OS]
Linux, 맥 OS, Windows등 모두 지원
GO언어 설치
[설치 Site]
zip 파일 다운
OS bits 에 맞는것을 설치해야함
[환경 변수 등록]
PATH=%PATH%~\go\bin
zip 압축을 풀고 go/bin 경로를 PATH에 추가
[많이 사용하는 IDE]
Visaul Studio Code 사용 : https://code.visualstudio.com/Download
GIT 설치 해야함 : https://git-scm.com/downloads
[GOPATH=경로 설정]
go 작업 폴더를 생성해서 GOPATH 로 환경변수 설정
GO언어 실행
[실행]
go run <go 소스파일>
[바이너리 빌드]
go build <go 소스파일>
결과 : exe 파일 생성됨
실행하면 정상 실행 됨
GO언어 특징
변수 선언
[C 언어의 경우 타입이 먼저 선언]
int a =0;
[GO 언어의 경우 변수명이 먼저오고 그 다음에 타입이 옴]
형식 1) var a int =0;
var 로 변수를 선언한다고 명시한 후, 변수 이름을 지정하고 맨 뒤에 변수의 타입을 명시
형식 2) a := 0;
" := " 이라는 연산자를 통해서 명시적인 타입을 적지 않고 변수를 선언 및 초기화 할 수 있음
slices
배열과 유사하지만 더욱 강력한 기능을 제공
연속된 메모리 공간에 동일한 타입의 데이터를 순차적으로 저장할 때 사용
[특징]
크기 변경이 가능
[선언 방법]
a := make([]int, 5, 10)
make 함수를 통해 길이가 5, 용량이 10인 int 형 slice 선언
a := []int{1, 20. 300. 4000}
make 함수를 사용하지 않고 slice 리터럴을 사용하여 slice 선언
a 는 자동으로 길이와 용량이 4인 slice 가 됨
map
Go에 내장된 associative date type
[선언 방법]
make(map[key-type]val-type)
m := make(map[string]int)
m["k1"] = 7
m["k2"] = 13
key-type는 키의 데이터 타입이고 val-type는 키에 저장할 자료의 데이터 타입
함수 선언 (Functions)
C/C++의 경우 반환 값이 함수 이름 앞에 나오는데, Go는 매개변수 뒤에 위치함
[선언 방법]
func plus(a int, b int) int {
return a+b
}
[특징]
1. Multiple Return Values : 한번에 두개 이상의 값을 반환하는 것을 허용
return a, b
2. Variadic Functions : 매개 변수의 개수가 가변적일 수 있음
func sum(nums ...int) {
포인터 사용 가능
C/C++의 pointer 와 동일한 개념
클래스를 지원하지 않음
Go는 클래스를 지원하지 않음
대신 구조체에 메서드를 연결 하는 식으로 클래스 처럼 사용 할 수 있음
goroutine
go routine(고루틴)은 실행할 수 있는 경량 Thread 임
현재 수행 흐름과 별개의 흐름을 만들어줌
goroutine 은 비 동기적 함수 루틴을 실행하므로
여러 코드를 동시에 실행하는데 사용됨
[선언 방법]
go 함수명(매개 변수)
Channels
데이터를 주고 받는 통로
goroutine 과 같이 두개 이상의 코드가 실행될 때
코드간 통신이 중요해지는데
그때 사용할 수 있는 기능임
goroutine은 Channels 를 이용해서 다른 goroutine 으로 데이터를 전송함
[Channel Buffering]
make(chan val-type)
channel에 data를 보냄 : channel <- data type
channel로 부터 data를 받음 : data type <- channe
[알아봐야할 것]
Channel Buffering
Channel Synchronization
Channel Directions
select
Panic
예상치 못한 문제가 발생할 때 사용
에러를 처리할 수 없을 때
기능을 중지하는게 더 나을경우 사용
[선언 방법]
painc( )
Defer
코드가 종료된 뒤에 수행할 함수를 설정하기 위해 사용
자원을 정리하기 위한 목적으로 사용됨
[선언 방법]
defer 함수이름( )
'코딩 > GoLang' 카테고리의 다른 글
Golang gtest (0) | 2022.01.02 |
---|---|
golang vscode args 전달 방법 (0) | 2022.01.02 |
godoc (0) | 2021.12.25 |
Golang race flag (-race) (0) | 2021.12.25 |
Golang web crawling 분석 (0) | 2021.05.26 |