Skip to content

juneyr.dev

golang 기초

go1 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 이든 붙일 수 있음, 기본 타입이나 다른 패키지 타입이 아니라면)

왜 포인터 리시버를 썼는가

  1. 메소드 호출될 때마다 값이 복사되지 않게 하기 위해서
  2. 리시버 포인터가 가리키는 값을 수정하기 위해서(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 케이스를 사용