Channel 基本使用

简介: Channel 基本使用

channel


channel 是有类型的管道,可以用 channel 操作符 <- 对其发送或者接收值。

创建 channel


c := make(chan int)

注意:管道必须指定类型,比如这里是 int,即往管道里传送的数据只能是 int 类型。当然可以是 interface {} 这种空接口方式,这样就可以传送各种数据类型了

也可以用 var 来声明管道,但是好像没啥意义

package main
import "fmt"
func main() {
    var c chan int
    fmt.Printf("%T %v\n", c, c)
    d := make(chan int)
    fmt.Printf("%T %v\n", d, d)
}

输出

chan int <nil>
chan int 0xc42006e060

管道方向


ch <- v // Send v to channel ch. v := <-ch // Receive from ch, and // assign value to v.

“箭头” 就是数据流的方向

注意接受时候 <- 和 chan 变量之间没有空格,虽然有空格也不会报错,但是 ide 会提示,因此还是依照规范不空格比较好

基本使用


package main import "fmt" func foo(i int, c chan int) { c <- i fmt.Println("send:", i) } func main() { c := make(chan int) go foo(0, c) res := <-c fmt.Println("receive:", res) }

输出

send: 0
receive: 0

默认情况下,在另一端准备好之前,发送和接收都会阻塞。这使得 goroutine 可以在没有明确的锁或竞态变量的情况下进行同步。

发动和接收数据应当在并行线上,而不能是串行的,因为发送和接收都会阻塞,如果串行,就会死锁(就是一个一直阻塞在那等对端),但不用为此操心,因为 go 在执行时候(编译会通过)会报错,比如:

package main
func main() {
    c := make(chan int)
    c <- 0
    <-c
}

报错:

fatal error: all goroutines are asleep - deadlock!
相关文章
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
21476 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
存储 缓存 测试技术
微服务注册中心的原理和实现方式
【2月更文挑战第19天】注册中心可以说是实现服务化的关键,因为服务化之后,服务提供者和服务消费者不在同一个进程中运行,实现了解耦,这就需要一个纽带去连接服务提供者和服务消费者,而注册中心就正好承担了这一角色。
|
数据管理 容器 BI
公开课05期 |基于宜搭的《招聘管理》应用搭建
本文章将以《招聘管理》场景为例,介绍通过Excel导入成线上系统的详细步骤。
13379 0
公开课05期 |基于宜搭的《招聘管理》应用搭建
|
8月前
|
存储 弹性计算 网络安全
阿里云用户上云流程参考:从账号注册、实名认证到领取和使用优惠券流程指南
不管我们是需要在阿里云平台注册域名还是需要购买云服务器及其他云产品,第一步都首要完成账号注册与实名认证流程,此为后选购各类云产品的必要前提。同时,在购买过程中,部分云服务器及其他云产品支持叠加使用阿里云赠送的各种优惠券,有效降低采购成本。本文将以图文的形式,为大家解析从阿里云账号注册、实名认证以及优惠券领取与使用的完整流程,助力用户以更优价格选购心仪的云产品。
724 11
|
8月前
|
数据采集 弹性计算 供应链
阿里云服务器ECS抢占式实例是什么?抢占式实例优缺点分析
阿里云ECS抢占式实例(原竞价实例)是一种低成本、按小时结算的付费模式,价格最低可至按量付费的1折,最高节省90%成本。适用于无状态、容错性强的业务,如大数据分析、科学计算、测试等。但存在被中断回收风险,当市场价格波动或资源紧张时实例将被释放,数据可能丢失,故不建议用于数据库等有状态应用。支持设置自动出价或手动限价,可选1小时保护期以提升稳定性。详情参考阿里云官方文档。
|
9月前
|
人工智能 自然语言处理 知识图谱
实战指南:基于【两大核心+四轮驱动】理论,制定高效Geo优化策略
随着生成式AI重塑信息获取方式,传统SEO正升级为GEO(生成式引擎优化)。本文解读于磊老师首创的【两大核心+四轮驱动】GEO理论,融合E-E-A-T原则,提出以人性化内容与权威性建设为核心,通过结构化数据、多模态覆盖、意图优化与持续监测,构建AI时代高效获客的内容战略。
813 1
|
机器学习/深度学习 人工智能 自然语言处理
人工智能应用领域有哪些
本文全面探讨了人工智能(AI)的应用领域和技术核心,涵盖医疗、交通、金融、教育、制造、零售等多个行业,并分析了AI技术的局限性及规避策略。同时,介绍了生成式人工智能认证项目的意义与展望。尽管AI发展面临数据依赖和算法可解释性等问题,但通过优化策略和经验验证,可推动其健康发展。未来,AI将在更多领域发挥重要作用,助力社会进步。
|
API 开发工具 开发者
HarmonyOS NEXT实战:拨打电话
本课程介绍如何在HarmonyOS SDK中使用Telephony Kit实现拨打电话功能。通过CallPhoneDemoPage示例,讲解如何输入电话号码并调用makeCall接口拨号,涉及call模块的使用及设备通话能力检测。
8168 0
|
10月前
|
关系型数据库 MySQL 分布式数据库
航天壹进制 PolarDB-X 1.0(DRDS) 数据备份容灾解决方案
本方案基于航天壹进制黑方系统,结合MySQL逻辑备份技术,为阿里云PolarDB-X 1.0(DRDS)构建非侵入式、高可靠的数据备份与恢复体系,支持全量备份、AES-256加密、压缩重删及灵活策略管理,兼容RDS MySQL操作习惯,保障数据安全与业务连续性。
|
弹性计算 云计算
阿里云服务器如何实现自动伸缩
阿里云服务器(ECS)的自动伸缩功能可以通过弹性伸缩服务(Auto Scaling)实现,该服务能够根据业务需求动态调整计算资源。 **一、准备工作:** 在实现自动伸缩配置之前,需完成以下准备工作: 1.创建阿里云账号并完成实名认证。(登录账号过程中有不懂的可以看小编的教程帖) 2.开通弹性伸缩服务(ESS),使用弹性伸缩服务(ESS)实现ECS实例的自动伸缩, 弹性伸缩服务(ESS)可以根据业务需求自动创建或移除ECS实例,实现计算能力的动态调整。 3.创建专有网络VPC和安全组,以提高网络的安全性和隔离性。