10/02 Study Daily record
Select Statement Definition
- Select statement allows our code to wait on multiple channels at the same time
- Select blocks until one channel is ready
- If multiple channels are ready, Select picks one at ramdom
Select Syntax
Select{
case value1 := <- channel1:
//code
case channel 2 <- value2:
//code
Test Exercise
- Assume we are writing spaceship software
- We will write a simple program to retrive security clearance for the different crew members
- The program will try to retrive data from two database servers concurrently for maximum efficiency
- Once any of the servers return the data, we print the security clearance and return
Code
package main
import (
"fmt"
"math/rand"
"time"
)
var scMapping = map[string]int{
"James": 5,
"Kevin": 10,
"Rahul": 9,
}
func findSC(name, server string, c chan int) {
//Simulate searching
time.Sleep(time.Duration(rand.Intn(50)) * time.Minute)
//return security clearance from map
c <- scMapping[name]
}
func main() {
rand.Seed(time.Now().UnixNano())
c1 := make(chan int)
c2 := make(chan int)
name := "James"
go findSC(name, "Server 1", c1)
go findSC(name, "Server 2", c2)
/*
Do some work...
*/
select {
case sc := <-c1:
fmt.Println(name, "has a security clearance of ", sc, "found in server1 ")
case sc := <-c2:
fmt.Println(name, "has a security clearance of ", sc, "found in server2 ")
default:
fmt.Println("Too slow!!")
}
}
- rand.Intn(50) : Intn returns, as an int, a non-negative pseudo-random number in the half-open interval [0,n). It panics if n <= 0.
- rand.Seed(time.Now().UnixNano()) :
- The initial value from which the random value is calculated is the same.This initial value is called the random seed. In order to produce a different random value each time the program is executed, the random seed must be set to a different value each time.
- UnixNano: Returns the Unix time in nanoseconds
- Unix time is a way of representing time. It is also called POSIX time or Epoch time. The time since January 1, 1970 00:00:00 Coordinated Universal Time (UTC) is converted into seconds and expressed as an integer.
- This is a method of displaying the time on a computer using a Unix-like operating system. Shows how many seconds have passed since January 1, 1970 0:0:0 UTC.
- When there is a default case inside the Select the select will not lock.
Author And Source
이 문제에 관하여(10/02 Study Daily record), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sjinsung/1002-Study-Daily-record저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)