이쿠의 슬기로운 개발생활

함께 성장하기 위한 보안 개발자 EverNote 내용 공유

코딩/GoLang

GoLang 개념

이쿠우우 2020. 12. 4. 18:39
반응형

 

GO언어란?

구글에서 2009년 공개된 언어

오픈소스 형태

Go언어는 컴파일 언어다른언어에 비해 컴파일 속도가 매우 빠름

최초로 디자인한 사람 : 로버트 그리즈머, 홉 파이크, 켄 톰슨

켄 톰슨 : B언어, C언어를 개발한 사람

 

[GO 언어를 사용하는 사람]

Gopher 라고 부름

 

[대표적인 구글 프로젝트]

Docker

twitch

tensorflow

FCM

등등

 

[인코딩]

UTF-8 사용

 

[GO언어는 시스템 프로그래밍을 하기 위해 만들어짐]

성능을 중요 시 함

C언어보다는 느리지만 현대 언어의 장점을 가지며 매우 빠른 특징을 가지고 있음

 

[호환 OS]

Linux, 맥 OS, Windows등 모두 지원

 

 

 

 

GO언어 설치

[설치 Site]

https://golang.org/dl/

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