go perm 源码

  • 2022-07-15
  • 浏览 (926)

golang perm 代码

文件路径:/test/chan/perm.go

// errorcheck

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test various correct and incorrect permutations of send-only,
// receive-only, and bidirectional channels.
// Does not compile.

package main

var (
	cr <-chan int
	cs chan<- int
	c  chan int
)

func main() {
	cr = c  // ok
	cs = c  // ok
	c = cr  // ERROR "illegal types|incompatible|cannot"
	c = cs  // ERROR "illegal types|incompatible|cannot"
	cr = cs // ERROR "illegal types|incompatible|cannot"
	cs = cr // ERROR "illegal types|incompatible|cannot"

	var n int
	<-n    // ERROR "receive from non-chan|expected channel"
	n <- 2 // ERROR "send to non-chan|must be channel"

	c <- 0       // ok
	<-c          // ok
	x, ok := <-c // ok
	_, _ = x, ok

	cr <- 0      // ERROR "send"
	<-cr         // ok
	x, ok = <-cr // ok
	_, _ = x, ok

	cs <- 0      // ok
	<-cs         // ERROR "receive"
	x, ok = <-cs // ERROR "receive"
	_, _ = x, ok

	select {
	case c <- 0: // ok
	case x := <-c: // ok
		_ = x

	case cr <- 0: // ERROR "send"
	case x := <-cr: // ok
		_ = x

	case cs <- 0: // ok
	case x := <-cs: // ERROR "receive"
		_ = x
	}

	for _ = range cs { // ERROR "receive"
	}

	for range cs { // ERROR "receive"
	}

	close(c)
	close(cs)
	close(cr) // ERROR "receive"
	close(n)  // ERROR "invalid operation.*non-chan type|must be channel|non-channel"
}

相关信息

go 源码目录

相关文章

go doubleselect 源码

go fifo 源码

go goroutines 源码

go nonblock 源码

go powser1 源码

go powser2 源码

go select 源码

go select2 源码

go select3 源码

go select4 源码

0  赞