github.com/epfl-dcsl/gotee@v0.0.0-20200909122901-014b35f5e5e9/test/chan/select7.go (about) 1 // run 2 3 // Copyright 2011 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 // Test select when discarding a value. 8 9 package main 10 11 import "runtime" 12 13 func recv1(c <-chan int) { 14 <-c 15 } 16 17 func recv2(c <-chan int) { 18 select { 19 case <-c: 20 } 21 } 22 23 func recv3(c <-chan int) { 24 c2 := make(chan int) 25 select { 26 case <-c: 27 case <-c2: 28 } 29 } 30 31 func send1(recv func(<-chan int)) { 32 c := make(chan int) 33 go recv(c) 34 runtime.Gosched() 35 c <- 1 36 } 37 38 func send2(recv func(<-chan int)) { 39 c := make(chan int) 40 go recv(c) 41 runtime.Gosched() 42 select { 43 case c <- 1: 44 } 45 } 46 47 func send3(recv func(<-chan int)) { 48 c := make(chan int) 49 go recv(c) 50 runtime.Gosched() 51 c2 := make(chan int) 52 select { 53 case c <- 1: 54 case c2 <- 1: 55 } 56 } 57 58 func main() { 59 send1(recv1) 60 send2(recv1) 61 send3(recv1) 62 send1(recv2) 63 send2(recv2) 64 send3(recv2) 65 send1(recv3) 66 send2(recv3) 67 send3(recv3) 68 }