`

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
}

分享到:
评论

相关推荐

    Golang实现超时退出的三种方式

    在Golang中,实现超时退出是一个常见的需求,特别是在处理网络请求或者异步任务时。本文将详细讲解三种不同的方法来实现这一功能。 首先,我们来看第一种方法,利用`context`包中的`WithTimeout`函数。`context`包...

    go语音实现等待超时锁的思考过程

    在 Go 语言中,确实没有内置的超时锁功能,这与 C 语言中的某些并发原语不同。在 Go 中,我们通常使用 Goroutine 和 Channel 来实现并发控制,但这些原语并不能直接提供超时功能。不过,可以通过一些技巧来模拟超时...

    Go并发调用的超时处理的方法

    在Go语言中,进行并发调用时,常常需要处理超时问题,以确保程序的响应时间在可接受范围内。本文将详细介绍如何在Go中实现并发调用的超时处理。 首先,我们来看并发调用的基本概念。并发调用通常通过启动多个...

    Go语言如何并发超时处理详解

    并发一个函数,等待1s后向timeout写入数据,在select中如果1s之内有数据向其他channel写入则会顺利执行,如果没有,这是timeout写入了数据,则我们知道超时了。 实现代码: package main import fmt import time ...

    Go语言利用time.After实现超时控制的方法详解

    在Go语言中,超时控制是一种常见的需求,特别是在进行网络编程和服务调用时。本文将深入探讨如何利用Go语言的time包中的After函数实现超时控制。 ### time.After函数的工作原理 time.After函数的作用是等待指定的...

    golang模拟实现带超时的信号量示例代码

    在标准库中,Golang并没有提供直接支持带超时功能的信号量,但我们可以利用Golang的特性来模拟实现。这篇内容将探讨如何在Golang中通过模拟实现一个带超时的信号量,并结合提供的示例代码进行分析。 首先,让我们...

    golang语言爬虫 并发版爬虫源码

    本主题聚焦于“golang语言爬虫并发版爬虫源码”,这是一份由Google资深工程师深入解析的教程,旨在帮助开发者理解如何利用Go语言的并发特性构建高效的网络爬虫。 Go语言的核心特性之一就是其强大的并发模型,它采用...

    GOLANG使用Context实现传值、超时和取消的方法

    ### GOLANG 使用 Context 实现传值、超时和取消的方法 #### 一、Context 的引入及背景 自 Go 1.7 版本以来,`context` 包被正式引入到 Go 语言的标准库中,它为 goroutine 的管理提供了一种优雅的方式。在并发编程...

    Go-一个golang的任务协程池简单实现

    在Golang中,协程(goroutine)是轻量级线程,它们是Go语言并发模型的核心组成部分。协程池是一种管理并发任务的机制,它允许我们限制同时运行的协程数量,避免过度消耗系统资源。本文将详细介绍如何在Go语言中实现...

    Golang实现for循环运行超时后自动退出的方法

    下面我们将详细探讨如何在Golang中实现for循环的超时退出。 首先,我们来看一个简单的for循环示例。在Golang中,for循环的语法非常灵活。以下是一个基础的for循环: ```go package main import "fmt" func main()...

    Go-PubSub队列和长轮询订阅(不绑定到http)

    在Go语言中,开发消息系统时,我们常常会遇到如何实现高效、可靠的消息传递机制。"Go-PubSub队列和长轮询订阅(不绑定到http)"是一个针对这一需求的解决方案,它利用了Go的并发特性以及长轮询技术,以提供一个独立于...

    服务器端Go程序对长短链接的处理及运行参数的保存

    在Go语言中,可以通过`net`包提供的`SetDeadline`、`SetReadDeadline`和`SetWriteDeadline`方法来控制连接的超时时间。 **示例代码:** ```go netListen, err := net.Listen("tcp", Port) if err != nil { Log(...

    Process background jobs in Go.zip

    在Go语言中,处理后台任务(也称为后台作业或异步任务)是构建高效、可扩展应用程序的关键技术。本文将深入探讨如何在Go中有效地管理后台任务,利用其并发模型和工具来提升程序性能。 首先,Go语言的核心特性之一是...

    gohbaseHBasego客户端.pdf

    gohbase是一个使用Go语言编写的HBase客户端,它完全用Go语言实现,并且在设计上受到了AsyncHBase Java客户端的启发。gohbase的特点在于其简单和轻量级的代码库,并且不需要Java环境支持,即不依赖于任何Java抽象工厂...

    golang中for循环遍历channel时需要注意的问题详解

    ```go for value := range channel { // 使用value } ``` 这里的`value`每次迭代都会获取`channel`中传递的数据。问题在于,如果在循环体内对`value`进行操作,例如创建新的goroutine,必须确保`value`的副本被传递...

    go并发编程

    Golang(简称 Go)作为一种现代编程语言,自设计之初就将并发作为其核心特性之一。Go 的并发模型简洁而强大,通过 goroutines 和 channels 实现了高效且易于理解的并发控制。 #### 二、goroutine:轻量级线程 **...

    Go Concurrency .pptx

    根据提供的文件信息,我们可以深入探讨Go语言中的并发概念与实践,包括并发与并行的区别、通道(channel)的理解、Go的并发模式等关键知识点。 ### Go并发基础 #### 并发与并行的区别 在讨论Go语言时,很多人首先...

    go语言实现聊天服务器的示例代码

    go语言实现聊天服务器主要涉及到网络编程的基础概念,go语言的并发机制以及TCP协议的应用。go语言中实现服务器端和客户端通信的基本步骤可以总结如下: 1. TCP连接的建立和监听 TCP是一种面向连接的、可靠的、基于...

Global site tag (gtag.js) - Google Analytics