1// errorcheck 2 3// Copyright 2009 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 various correct and incorrect permutations of send-only, 8// receive-only, and bidirectional channels. 9// Does not compile. 10 11package main 12 13var ( 14 cr <-chan int 15 cs chan<- int 16 c chan int 17) 18 19func main() { 20 cr = c // ok 21 cs = c // ok 22 c = cr // ERROR "illegal types|incompatible|cannot" 23 c = cs // ERROR "illegal types|incompatible|cannot" 24 cr = cs // ERROR "illegal types|incompatible|cannot" 25 cs = cr // ERROR "illegal types|incompatible|cannot" 26 27 c <- 0 // ok 28 <-c // ok 29 x, ok := <-c // ok 30 _, _ = x, ok 31 32 cr <- 0 // ERROR "send" 33 <-cr // ok 34 x, ok = <-cr // ok 35 _, _ = x, ok 36 37 cs <- 0 // ok 38 <-cs // ERROR "receive" 39 x, ok = <-cs // ERROR "receive" 40 _, _ = x, ok 41 42 select { 43 case c <- 0: // ok 44 case x := <-c: // ok 45 _ = x 46 47 case cr <- 0: // ERROR "send" 48 case x := <-cr: // ok 49 _ = x 50 51 case cs <- 0: // ok 52 case x := <-cs: // ERROR "receive" 53 _ = x 54 } 55 56 for _ = range cs {// ERROR "receive" 57 } 58 59 close(c) 60 close(cs) 61 close(cr) // ERROR "receive" 62} 63