📌 golang 장점
- 정적타입 / 강타입 언어이다.
- 컴파일 속도가 빠른 컴파일 언어이다. ---> 컴파일 속도가 빨라서 인터프리터 언어처럼 사용가능하다.
- 비동기 메커니즘을 지원하는 Go routine이 있다. 그래서 병렬 프로그래밍이 간단해질 수 있다.
- native binary가 나온다. ( 배포가 편하다 )
🔥 Go routine
- 멀티 쓰레드 메커니즘이지만, 자체적인 Scheduler에 의해 관리되는 경량 쓰레드라서 메모리 관리가 효율적이다. 해당 경량 쓰레드는 OS에서 관리하는 경량 쓰레드보다도 더 경량이다.
- Channel을 통해 동시성을 지원한다.
- Go는 대표적인 채널 기반 언어이다. 쓰레드라는 것을 명시적으로 주지 않아도, Go routine을 생성하면 알아서 쓰레드를 생성해주고 적절한 쓰레드에 Go routine을 할당한다.
📌package in go
- ⚡️ package 와 GOPATH에 대한 내용은 더 공부가 필요하다. 일단 현재까지 알아낸 사실만 기록해보겠다.
- 모든 Go Source는 GOPATH 안에서 관리된다. 해당 GOPATH안에는 bin, pkg, src가 있고, src 안에 소스를 위치시킨다.
- src 안에는 domain형태로 소스를 보관한다. 나는 일단 연습이기 때문에, 연습용 폴더 이름으로 생성했다.
- 같은 패키지 안에 있는 파일들의 package 선언은 모두 같아야 한다.
위의 파일의 예에서 basic-syntax1
에서는 package main을 선언하고, basic-syntax2
package basic을 선언하면 에러가 난다.
- main 함수는 여러 개 선언할 수 있으나, 그렇다면 같은 패키지 안에서의 파일들은 모두 package를 main으로 갖고 있어야 한다.
- 그래서 package가 main과 ( executable ) non main으로 구분된다. ( non-executable )
🔥 Package 명명법 - 1)
- package명과 폴더명을 같게 지어주는게 좋은 명명법이다.
- 폴더의 level은 flat할수록 좋다. 최대 level3 까지만 가는 것이 좋다.
- multiple package를 갖는 것도 좋지 않다. 에러가 발생한다.
🔥 Pacakge 명명법 -2)
- github : 아이디 : 프로젝트 : 패키지
Youtube : Go의 패키지 (Go 기본 사항 # 6)
https://www.youtube.com/watch?v=sf7f4QGkwfE&t=550s
https://github.com/gophertuts/go-basics/tree/master/packagesTucker 16장 모듈과 패키지(참조)
https://www.youtube.com/watch?v=Ja-xVdcgo-s&t=2502s
📌 golang - 기초 : basic syntax
🔥 실행
- go run [main package 가 있는 소스].go
🔥 main
- java 처럼 항상 main에서 시작한다. 여기서 주의할 점은, package가 main으로 선언돼있지 않으면 main 함수를 쓸 수 없다는 점이다.
🔥 변수선언 및 할당
- 자료형을 먼저 선언하는 대다수의 언어와는 다르게, 자료형을 뒤에 선언한다.
- javascript와 마찬가지로, var와 const로 변수를 선언할 수 있다. var은 unfixed value이고, const는 fixed value이다. (let은 없다)
- return 형을 여러개 선언할 수 있다는 것은 go만의 특이점이다. 다만, return 형이 여러 개 일때는 함수 이름 옆에 return 값의 개수와 자료형을 명시해주어야 한다.
🔥 축약형 ===> :=
var name string은 := 와 같이 축약형으로 나타낼 수 있다.
🔥 naked returns
위와 같이 return 선언문에 return 변수를 선언할 수 있다. return에는 return value만 주면, 변수와 알아서 mapping이 된다.
🔥 array
java와 비교해보면 new 연산자가 없고, 배열의 선언자 역시 앞으로 온다.
java의 경우 : int[] array = new int[]{1,2,3,4,5};
go의 경우 : array := []int{1,2,3,4,5}
🔥 for loop
for loop의 경우 2개의 방법이 있다.
- 일반적 for loop 순회하는 방법
for i:=0; i<5; i++ {
...
}
이 때, := 로 값을 넣어주는 것과, () brace가 없는 것에 유의하자.
- range를 이용하는 방법
python에서와 비슷하게 range를 이용하면 value값과 index값을 가져올 수 있다.
for index, value := range arr {
...
}
📌 basic syntax # 2
🔥 pointer
- go 에서는 pointer를 이용할 수 있다.
- pointer -> 주소를 저장하는데 사용된다.
- 위의 print는 a의 주소값이 출력된다.
- &는 해당 변수의 주소를, *는 값을 나타낸다.
- 포인터 변수 -> 해당 주소를 받을 때 포인터 변수를 선언한다.
- int* b = &a ---> print(b) : a의 주소
- print(*b) : b의 주소가 갖고 있는 값
pointer관련 참조
https://jeak.tistory.com/34
https://jhnyang.tistory.com/100
https://jdpb.tistory.com/entry/C%EC%96%B8%EC%96%B4-%EB%8B%A4%EC%A4%91%ED%8F%AC%EC%9D%B8%ED%84%B0
🔥 array append
- array는 크기, 자료형, data 순으로 작성할 수 있다. ( [] int {1,2,3,4} )
- java랑 비교했을 때 순서가 좀 헷갈린다. [] 만 앞으로 땡겨졌다고 생각하면 된다.
- append 연산이 가능한데, append 연산을 하려면 당연하게도 동적배열로 선언해야 한다. 동적배열은 할당하는 크기를 비워주면 동적 배열로 할당이 된다.
[]
- append 연산을 array에 정의된 메서드로는 할 수 없고, append라는 java의 static개념의 메서드를 이용해서 사용할 수 있다.
- 사용법은 위와 같다.
🔥slice 연산
- python의 slice연산과 같은 메커니즘의 slice연산을 제공한다.
- 만약 array의 값 중 1번 index의 값을 삭제하고 싶다면, 아래와 같이 응용할 수 있다.
🔥 map
- map을 선언하는 방법이 특이하다. 기억해두자.
'golang > 📌golang 기초' 카테고리의 다른 글
golang 기초 #2 (0) | 2021.11.04 |
---|
댓글