본문 바로가기
Programming Language/Go

[Go] 정리 - 2

by hwan20c 2024. 3. 29.

go의 loop(반복문)는 오로지 for만 사용하는 것으로 한다.

range라는 단어는 array에 loop를 적용할 수 있도록 해준다.
range는 index를 줄 수 있다.

----------------------------------------------------

if문이나 if else 문에서 조건문 뒤에 바로 새로운 변수에 대한 값을 생성하는 방법을 쓸 수 있다.(variable extenstion)
switch문도 같다.

---------------------------------------------------------

slice는 go에서 배열의 길이가 없이 사용되는 array이다.
go는 append를 사용해서 배열에 값을 추가를 하는데, 기본적으로 배열의 원값을 바꾸는 게 아니고 새로운 값을 만들어서 리턴해준다.

---------------------------------------------------------------

go의 map은 map[string]string => [key]value  형태로 이루어진다.

------------------------------------------------------------------

go에는 constructor(생성자)가 없어서 따로 실행을 시켜줘야 한다.

------------------------------------------------------

변수명이나 func명도 똑같이 대문자면 public 소문자면 private로 정의된다.

------------------------------------------------------

go에는 exception을 처리하는 try catch throw 같은 건 없다. error를 직접 체크해야 한다.

-------------------------------------------------------------------- 

GO에서 최적화하는 방법은 동시에 작업을 처리하는 것 -> 함수를 불러올 때 go라는 keyword를 달아주면 비동기식 처리로 바뀐다.
메인함수 안에 모든 함수가 go 처리가 되어있으면 그냥 끝나버린다 -> go처리는 다른 함수가 진행될 때 같이 진행되는 개념이므로 모든 함수가 go를 가지게 되면 메인 함수 안에서 진행되는 함수가 없기 때문에 그냥 끝난다.

--------------------------------------------------------------------

channel 은 pipe 같은 것 
위의 설명에 main에 모든 함수에 go 처리가 되어있으면, 메인이 바로 종료되는 것을 방지할 수 있게, channel을 사용하는 방법이 있다.(sleep을 사용하여 기다리게 한 후)

----------------------------------------------------------------

메시지를 받는 건(<-c) blocking operation(channel을 이용해서)
남아있는 goroutin이 없는데 채널값을 받으려고 하면 데드락현상이 발생한다(go는 저절로 goroutin이 몇 개인지 확인할 수 있다.)

-----------------------------------------------------------------

함수의 받는 인자에 c chan<- result 이런 식으로 처리하면 보내는 채널만 가능하고 받는 채널은 불가능하다는 의미이다.

'Programming Language > Go' 카테고리의 다른 글

[Go] 정리 - 1  (1) 2024.03.29

댓글