일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Callback
- Sync
- Golang
- Close
- channel
- 리뷰
- window
- Python
- http
- json
- C
- File
- 영화
- windows
- GO 언어
- Linux
- 책
- mutex
- JavaScript
- c++
- FOR
- write
- go
- tcp
- package
- install
- go언어
- API
- range
- bitcoin
- Today
- Total
목록go (56)
Code Habit
Go 언어에서는 채널 이외에도 고루틴의 실행 흐름을 제어하는 동기화 객체를 제공한다. 대표적인 동기화 객체는 다음과 같다. Mutex: 상호배제(mutual exclusion)라고도 하며 여러 스레드(고루틴)에서 공유되는 데이터를 보호할 때 주로 사용한다. RWMutex: 읽기/쓰기 뮤텍스이다. 읽기와 쓰기 동작을 나누어서 잠금(락)을 걸 수 있다. Cond: 조건 변수(condition variable)이다. 대기하고 있는 하나의 객체를 깨울 수도 있고 여러 개를 동시에 깨울 수도 있다. Once: 특정 함수를 딱 한 번만 실행할 때 사용한다. Pool: 멀티 스레드(고루틴)에서 사용할 수 있는 객체 풀이다. 자주 사용하는 객체를 풀에 보관했다가 다시 사용한다. WaitGroup: 고루틴이 모두 끝날 ..
select문에서 time.After 함수를 사용하면 시간 제한 처리를 할 수 있다. time.After는 특정 시간이 지나면 현재 시간을 채널로 보낸다. package main import ( "fmt" "time" ) func main() { c1 := make(chan int) // int형 채널 생성 c2 := make(chan string) // string형 채널 생성 go func() { for { c1
Go 언어는 여러 채널을 손쉽게 사용할 수 있도록 select 분기문을 제공한다. - select { case
보내기 전용 채널과 받기 전용 채널은 값의 흐름이 한 방향으로 고정된 채널이다. 보내기 전용( send-only ): chan
채널에 값이 몇 개나 들어올지 모르기 때문에 값이 들어올 때마다 계속 꺼내기 위해 range를 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package main import ( "fmt" "runtime" ) func main() { runtime.GOMAXPROCS(1) c:= make(chan int) // int 형 채널 생성 go func() { for i := 0; i
채널에 버퍼 개수를 지정할 수 있다. 이를 채널 버퍼링이라 한다. make(chan 자료형, 버퍼개수) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 package main import ( "fmt" "runtime" ) func main() { runtime.GOMAXPROCS(1) done := make(chan bool, 3) // 버퍼가 2개인 비동기 채널 생성 count := 20 // 반복할 횟수 go func() { for i:=0; i
채널은 고루틴끼리 데이터를 주고받고, 실행 흐름을 제어하는 기능이다. 모든 타입은 채널로 사용할 수 있다. 그리고 채널 자체는 값이 아닌 레퍼런스 타입이다. 채널은 다음과 같이 공간을 할당 후 사용해야 한다. 이렇게 생성하면 동기 채널( synchronous channel )이 생성된다. make(chan 자료형) 채널은 다음과 같이 사용한다. 채널