🌱가비지 컬렉션
- 가비지 컬렉션 이란 메모리 관리 기법중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기법
- Go 언어는 가비지 컬렉션(Garbage Collection, GC)을 제공
- C, C++는 메모리를 할당하면 반드시 해제를 해주어야 하며 로직 작성보다 메모리 관리에 더 많은 노력과 시간을 소모하고 있어서 생산성이 많이 떨어진다 이후 메모리를 알아서 관리해주는 가비지 컬렉션 기술이 나왔고, 이 기술을 사용한 Java와 C#이 등장했으며 마찬가지로 Python, Ruby, JavaScript 등의 스크립트 언어들도 각 언어의 가상 머신에서 가비지 컬렉션 기술을 사용
- Go 언어는 메모리를 관리해주는 가비지 컬렉터(Garbage Collector)가 실행 파일안에 내장되어 있다. 가상 머신 위에서 실행되는 언어들처럼 가상 머신이 메모리 관리를 해주는 것과 차이가 있다
- Go 언어는 C, C++ 실행 파일 방식의 간결함과 가상 머신의 가비지 컬렉션 기능을 포함하고 있다.
🌱병행성
- Go 언어는 go 키워드를 통해 함수 여러 개를 동시에 실행할 수 있다. 이렇게 실행된 함수를 고루틴(Goroutine)이라고 하는데 스레드와는 차이점이 있다. 스레드는 운영체제의 커널에서 제공하는 리소스이기 때문에 많이 생성할수록 부담이 커짐
- 최대 프로세서(코어) 개수 설정에 따라 멀티코어도 지원(현재 프로세서의 개수를 구할 수 있으며, 일부 프로세서만 사용할 수도 있다)
- go 에서는 ;(세미클론이 필요없다) 선택적으로 사용할 수는 있음
- go에서는 패키지 개념 패키지 내부에서는 변수,상수,함수,구조체,메서드가 선언
- 모든 go파일은 패키지 내부에속해야한다 main패키지가 아닌 다른코드를 실행시킬수 없음
- import"fmt" 다른 패키지를 포함하기 위해 사용 go 의패키지는 src에 모여있으며 pkg폴더에는 그러한 패키지가 컴파일된 소스코드가 모여있다
- 변수 선언 var 사용 함수안에서는 단축변수선언 사용가능 :=
- 변수를 여러개를 선언하고 초기화할떄에는 반드시 선언하는 변수와 초기화하는 값의 개수가 같아야함 타입은 달라도 됨
- go에서는 패키지,타입과 똑같은 이름의 변수를 사용하여도 에러가 나지 않는다
🌱변수
- var 변수1, 변수2 자료형 = 초깃값1, 초깃값2 : 여러개의 변수를
var x, y int = 30, 50 // x = 30, y = 50
var age, name = 10, "Maria" // age = 10, name = "Maria"
a, b, c, d := 1, 3.4, "Hello, world!", false // a = 1, b = 3.4, c = "Hello, world!", d = false
🌱상수 const
- go에서는 타입을 정하지 않으면 go에서 알아서 타입을 지정해준다
- go가 다른언어랑 다른 점은 클래스가 없다는 것이다.메서드라고 표현하는 것도 표현 방식이 다른 뿐 일반 함수와 유사하게 표시된다
- go는 리턴 값을 여러개의 값으로 돌릴 수 있다.
- go&go-routine go 키워드는 멀티스레드를 사용할때 유용하며 동시성을 가진다.
- go get go get을 통하여 다른 패키지를 다운받을 수 있다.얻어온 패키지는 GOPATH로 다운로드 된다.GOPATH는 작업공간이라고도 하며 사용자마다 별도로 관리된다
- go mod 사용자 정의 모듈을 만들떄 사용한다. example.com폴더로 진입하여 go mod init example.com명령어를 통해 모듈을 정의한다