Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 페이징
- 서버설정
- 처음 만나는 AI 수학 with Python
- 리눅스
- network configuration
- 코드로배우는스프링부트웹프로젝트
- 자료구조와함께배우는알고리즘입문
- 스프링부트핵심가이드
- 자료구조와 함께 배우는 알고리즘 입문
- 티스토리 쿠키 삭제
- 자바편
- 데비안
- 친절한SQL튜닝
- 알파회계
- 코드로배우는스프링웹프로젝트
- 처음 만나는 AI수학 with Python
- ㅒ
- iterator
- 목록처리
- 네트워크 설정
- resttemplate
- 스프링 시큐리티
- baeldung
- /etc/network/interfaces
- 선형대수
- Kernighan의 C언어 프로그래밍
- d
- 이터레이터
- 구멍가게코딩단
- GIT
Archives
- Today
- Total
bright jazz music
Go - channel 2 (for loop 사용) 본문
package main
import (
"fmt"
"time"
)
func main() {
c := make(chan string)
people := [2]string{"hojun", "oceanus"}
for _, person := range people {
go isSexy(person, c)
}
fmt.Println("Waiting for message")
resultOne := <-c
resultTwo := <-c
//resultThree := <-c //데드락 에러
fmt.Println("Received this message:", resultOne) //메시지 하나를 resultOne에 받고
fmt.Println("Received this message:", resultTwo) //그 다음에 받는 게 무엇이든간에 resultTwo에 받는다.
}
func isSexy(person string, c chan string) {
time.Sleep(time.Second * 10)
c <- person + " is sexy"
}
//만약 고루틴 2개가 돌아가고 끝났다면 그 이상의 메시지를 받기 위해
//기다릴 수 없다. 만약 resultThree := <-c를 만든다면
//데드락 오류가 발생할 것이다. 남아 있는 고루틴이 없는데 메시지를 하염없이
//기다린다면 프로그램은 끝나지 않고 오류도 모를 것이기 때문이다.
//그렇다면 배열이 늘어날 때마다 <-c을 써줘야 하는 걸까? 원래는 그렇다.
//그러나 for loop 을 사용하면 된다.
for loop 사용하기
package main
import (
"fmt"
"time"
)
func main() {
c := make(chan string) //채널을 통해 string 타입의 메시지를 주고 받을 것이다
people := [5]string{"hojun", "oceanus", "dal", "japanguy", "larry"}
for _, person := range people {
go isSexy(person, c)
}
fmt.Println("Waiting for message")
for i := 0; i < len(people); i++ {
fmt.Println(<-c)
//<-c는 채널로부터 메시지를 받는다는 의미를 가지며, blocking operation이다.
}
}
func isSexy(person string, c chan string) {
time.Sleep(time.Second * 10)
c <- person + " is sexy" //person 역시 string type이다.
}
===
Waiting for message
larry is sexy
oceanus is sexy
japanguy is sexy
dal is sexy
hojun is sexy
//완료된 순서가 배열의 순서와 다르다. 동시에 진행됐다는 의미이다.
'Language > Go' 카테고리의 다른 글
1. Go 웹 프로그래밍 (0) | 2021.11.17 |
---|---|
Go - URL checker (Goroutine + channel) (0) | 2021.02.21 |
GO - Goroutines 고루틴 기본 (0) | 2021.02.19 |
Go - URL Checker 하나 씩 순차적 (0) | 2021.02.19 |
Go - map 타입에 메소드 추가하기(Update, Delete) (0) | 2021.02.19 |
Comments