golang switch는 신형 언어에 확장되서 그런가 꽤나 만능이다.
특이하게 조건식도 가능하고, 케이스 리스트도 된다.(c#에서 얼핏 봤던 느낌..)
package main import ( "fmt" "time" ) func main() { t := time.Now() switch { case t.Hour() < 12: fmt.Println("Good morning!") case t.Hour() < 17: fmt.Println("Good afternoon.") default: fmt.Println("Good evening.") } } |
[링크 :https://go.dev/tour/flowcontrol/11]
func WhiteSpace(c rune) bool { switch c { case ' ', '\t', '\n', '\f', '\r': return true } return false } |
[링크 : https://hamait.tistory.com/1017]
아무튼 select는 channel 처리에 좀더 특화된 구문으로 생긴것 자체는 switch - case와 동일하게 작성된다.
다만, 동시에 여러개가 들어왔을 경우 랜덤하게 실행된다고 한다.
(생각이 꼬였는지 동시에 들어오면 가장 위에꺼 부터 실행되어야 하는거 아냐? 싶은데 동시성이니까 랜덤하게 처리되는건가..)
The select statement lets a goroutine wait on multiple communication operations. A select blocks until one of its cases can run, then it executes that case. It chooses one at random if multiple are ready. |
package main import "fmt" func fibonacci(c, quit chan int) { x, y := 0, 1 for { select { case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } } } func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit) } |
[링크 : https://go.dev/tour/concurrency/5]
[링크 : https://edu.goorm.io/learn/lecture/2010/한-눈에-끝내는-고랭-기초/lesson/382961/채널-select문]
'Programming > golang' 카테고리의 다른 글
golang 동시성 (0) | 2023.05.24 |
---|---|
golang 고루틴과 채널 (0) | 2023.05.16 |
golang uds (0) | 2023.05.16 |
golang mutex (sync) (0) | 2023.05.16 |
go 포맷터 (0) | 2023.05.11 |