`

go chan超时

    博客分类:
  • go
 
阅读更多
package main

import (
	"fmt"
	"time"
)

func main() {
	// 首先,我们实现并执行一个匿名的超时等待函数
	timeout := make(chan bool, 1)
	ch := make(chan string, 2)
	go func() {
		time.Sleep(1e9) // 等待1秒钟
		timeout <- true
	}()
	// 然后我们把timeout这个channel利用起来
	select {
	case <-ch:
		fmt.Println("read data")
	// 从ch中读取到数据
	case <-timeout:
		fmt.Println("fin")
		// 一直没有从ch中读取到数据,但从timeout中读取到了数据
	}
}



朝关闭的通道可以接收数据,但不能发送数据
package main

import "fmt"

func main() {
	// 创建一个整型的通道
	ch := make(chan int, 2)
	ch <- 1
	ch <- 2
	// 关闭通道
	close(ch)
	// 打印通道的指针, 容量和长度
	fmt.Printf("ptr:%p cap:%d len:%d\n", ch, cap(ch), len(ch))

	v, ok := <-ch

	fmt.Println(v, ok)
	// 给关闭的通道发送数据
	ch <- 1
}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics