golang 기초
— go — 1 min read
Golang 기초 문법 공부하기
자료형
변수 선언
함수 선언
반복문
조건문
if 문
if 문에서 짧은 명령문 사용하기
구조체
포인터
포인터가 있지만 포인터 연산은 불가능하다.
new 함수
new(T) 는 모든 필드가 0인 T 타입 포인터를 반환한다.
슬라이스(Slices)
슬라이스는 배열의 값을 가리키고, 배열의 길이를 가지고 있다.
파이썬 처럼 나눌 수도 있다.
슬라이스는 make
함수로 만들 수 있다.
var z []int
와 같은 슬라이스는 nil slice이고, 길이와 용량(최대크기)가 0이다.
range
For 와 range를 동시에 사용하면 슬라이스나 맵을 순회할 수 있습니다.
i나 v부분은 _
로 무시해서 사용할 수 있다.
아예 필요 없다면 지워도 괜찮다.
Map
Key : value 타입, 반드시 make를 명시해야함.
맵 대표적인 예제: WordCount
Closure
함수를 반환할 수 있고(return 다음에 함수를 쓸수 있고) 함수를 넘길 수 있음
클로져는 연습이 되어야할 듯 ㅜ
Switch
일반적인 switch 문과 같지만 알아서 break함
위에서 아래로 평가해서, 조건이 참인 것을 찾으면 그 아래는 실행하지 않음
go에서는 조건을 생략할 수 있음 (switch만 사용, switch true 와 같음)
메소드와 인터페이스
메소드
고에는 클래스가 없다. 메소드를 구조체에 붙일 수 있음 ( 사실 어떤 type 이든 붙일 수 있음, 기본 타입이나 다른 패키지 타입이 아니라면)
왜 포인터 리시버를 썼는가
- 메소드 호출될 때마다 값이 복사되지 않게 하기 위해서
- 리시버 포인터가 가리키는 값을 수정하기 위해서(Write 작업을 하는 경우)
인터페이스
메소드의 집합! 메소드가 구현해놓은 type들은 모두 인터페이스 타입의 값이 될 수 있음 (말이 어려운데)
인터페이스의 메소드들을 구현하면 인터페이스들을 구현한 것이다.
에러
웹서버
이미지
image
패키지는 Image 인터페이스를 정의합니다.
참조 : image - The Go Programming Language
동시성 :goroutine
고루틴은 Go 런타임에 의해 관리되는 쓰레드입니다.
go f(x,y,z)
는 새로운 고 루틴을 시작시킵니다.
고루틴은 동일 주소 공간에서 시작되므로 공유 자원에 대한 접근은 sync 형태여야합니다.
동시성: Channel
채널은 채널 연산자(<-)를 이용해 값을 주고 받을 수 있는, 타입이 존재하는 파이프입니다.
송수신은 상대방이 준비될 때까지 있다 블록됩니다.
채널은 버퍼링 될 수 있습니다.
데이터 송신 측은 보낼 값이 없다는 걸 알리기 위해 채널을 닫을 수 있습니다.
close(c)
수신 측은 다음 코드로 채널의 열림 여부를 알 수 있습니다.
v, ok := <- ch
ok가 false인 경우 채널이 닫히고 받을 값이 없다는 뜻이 됩니다.
Select 구문
Select 구문은 고루틴이 다수의 통신 동작으로 부터 수행 준비를 기다릴 수 있게 합니다. select는 case 구문으로 받는 통신 동작 중 하나가 수행될때까지 진행을 블록합니다. 다수의 채널이 동시에 준비되면 그 중 무작위로 선택합니다.
default case
현재 수행 준비가 완료된 케이스가 없을 때 수행 블로킹 없이 async 송수신을 하고자 할때 default 케이스를 사용