搜索
首页web前端html教程Go元素的关键字所在--chan通道

HTML validate是指HTML验证。它是通过与标准HTML规则进行比较的方式,分析HTML文档、标记出错误和非标准代码的处理过程。Web页面使用HTML进行渲染,而HTML本身采用了HTML规范作为其规则和标准。通过验证HTML代码穿越多重浏览器标准!

chan

chan又称之为通道,形式类似于管道,内容从一头被送进去,从另一头被读取出来。下边来介绍定义通道的方法:

var 变量名 chan dataType

定义通道时,需要指定数据类型,就是只允许这个指定数据类型的变量通过这个通道。

初始化通道

golang中在初始化通道类型变量时,可以将通道分为两种情况,一种是带缓冲的通道,另一种是不带缓冲的通道。
下边来介绍下两种情况的初始化方法:

// 初始化不带缓冲的通道,通道中数据类型是intvar ch1 = make(chan int)// 初始化带10个缓冲的通道,通道中数据类型是stringvar ch2 = make(chan string,10)

还有一种写法是,定义并初始化通道,

// 定义通道,并给通道初始化8个缓冲ch3 := make(chan int ,8)// 定义通道,并初始化为不带缓冲通道ch4 := make(chan string)

通道赋值

对通道的读取和写入都可能进入阻塞状态。

  1. 不带缓冲的通道,在写入时,就会发生阻塞,直到通道中信息被读取后,才会结束阻塞。

  2. 带缓冲的通道,每次向通道中写入一次信息,通道长度就会加1,每成功从通道读取一次信息,通道长度减1。如果通道长度等于通道缓冲长度时,向通道继续写入信息会使程序阻塞;如果通道长度小于通道缓冲长度,则向通道中写入信息不会造成阻塞。假如通道长度是5,那么在通道没有被读取的情况下,向通道中第6次写入信息时才会导致程序阻塞。

通道写入的语法格式是:

var ch = make(chan string,10)// 将字符串”hello"写入到通道中,通道长度加1ch <- "hello"

读取通道

通道为空
 1. 通道没有关闭,程序会进入阻塞状态,等到通道有信息写入
 2. 通道已经关闭,不会阻塞,返回通道中数据类型初始值(脏数据),如通道是chan int时,返回值是0,通道是chan string时,返回值是空。
 通道不为空
 1. 通道没有关闭,从通道中读取一次信息,读取完成后,往下执行
 2. 通道已被关闭,从通道中读取一次信信,读取完成后,往下执行

读取通道操作:

val,ok := <-ch

使用断言读取通道中的值,检查通道是否还有内容,以及判断通道是否已经关闭,当通道中没有信息,且通道已经关闭时,ok值为false,当通道没有关闭,但是通道中没有信息,程序将会阻塞,如果通道中有内容,则ok值是true。

另一种不使用断言的方式读取通道

val := <-ch

写入与读取通道

读取不带缓冲的通道示例方法:

package mainimport (    "fmt")func main() {    // 定义一个不带缓冲的通道,通道中数据类型是int
    var c = make(chan int)    // 开启一个携程,读取通道中的内容
    go func() {
        fmt.Println("写入信息是:", <-c)
    }()    // 向通道中写入数据
    c <- 1}

输出结果:

写入信息是: 1

当对带缓冲的通道进行读写时,只要通道中数据长度不大于缓冲长度,就不会出现阻塞,但是读取带缓冲的通道,通道中没有内容时,程序依然会进入阻塞状态。所以,带缓冲的通道,只对写入产生影响。下边来一个示例:

package mainimport (    "fmt")func main() {    var c = make(chan int, 3)
    c <- 1
    c <- 2
    c <- 3
    //c <- 4
    fmt.Println("end")
}

输出信息是:

end

当向带3个缓冲的通道中写入内容时,由于只写入了3次,通道的长度刚好等于缓冲的长度,程序没有阻塞,当将 c <- 4 前边的注释去掉后,由于没有程序去读取这个通道,主程序进入死锁状态而导致异常。

协程通信

通道类型变量的实质上是一个地址,如下边示例代码:

package mainimport (    "fmt")func main() {    var c = make(chan int, 3)
    fmt.Println(c)
}

输出结果:

0xc042072080

所以,当通道类型变量当做参数传入函数后,在函数中可以直接对通道中的值进行修改。虽然chan类型变量是一个地址,但是golang不允许使用取值操作符( * )来操作chan类型变量。但是如果你先对chan类型变量使用取地址操作符(&),然后再使用取值操作符(*),这种操作方法还是可以正常运行的,但是这意义不大,除非你的目的是在函数调用中,重新定义一个chan类型变量替换原来的变量。

chan的这些特性,可以很好的实现协程之间的同步功能。不带缓冲的通道,是一种零容忍的等待,可以实现强制同步;带缓冲的通道,是有一定量容忍度的等待,可以实现允许有一定时间差的同步。

简单的协程间通信例子:

package mainimport (    "fmt"
    "time")func main() {    var c = make(chan int)    go func() {
        fmt.Println("待命模式:")        // 读取通道时产生阻塞,等待其他协程向通道写入信息
        fmt.Println("命令代码是:", <-c)
    }()    go func() {        // 延时3秒,向通道中写入信息
        time.Sleep(time.Second * 3)
        fmt.Println("发送命令:")
        c <- 8
        close(c)
    }()
    time.Sleep(time.Second * 5)
    fmt.Println("执行完成")
}

输出信息是:

待命模式:
发送命令:
命令代码是: 8
执行完成

  相关推荐:

HTML validate HTML验证_HTML/Xhtml_网页制作

HTML技巧汇编_CSS/HTML

以上是Go元素的关键字所在--chan通道的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
HTML,CSS和JavaScript的未来:网络开发趋势HTML,CSS和JavaScript的未来:网络开发趋势Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML:结构,CSS:样式,JavaScript:行为HTML:结构,CSS:样式,JavaScript:行为Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML的未来:网络设计的发展和趋势HTML的未来:网络设计的发展和趋势Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述HTML与CSS vs. JavaScript:比较概述Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML:是编程语言还是其他?HTML:是编程语言还是其他?Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。

HTML:建立网页的结构HTML:建立网页的结构Apr 14, 2025 am 12:14 AM

HTML是构建网页结构的基石。1.HTML定义内容结构和语义,使用、、等标签。2.提供语义化标记,如、、等,提升SEO效果。3.通过标签实现用户交互,需注意表单验证。4.使用、等高级元素结合JavaScript实现动态效果。5.常见错误包括标签未闭合和属性值未加引号,需使用验证工具。6.优化策略包括减少HTTP请求、压缩HTML、使用语义化标签等。

从文本到网站:HTML的力量从文本到网站:HTML的力量Apr 13, 2025 am 12:07 AM

HTML是一种用于构建网页的语言,通过标签和属性定义网页结构和内容。1)HTML通过标签组织文档结构,如、。2)浏览器解析HTML构建DOM并渲染网页。3)HTML5的新特性如、、增强了多媒体功能。4)常见错误包括标签未闭合和属性值未加引号。5)优化建议包括使用语义化标签和减少文件大小。

了解HTML,CSS和JavaScript:初学者指南了解HTML,CSS和JavaScript:初学者指南Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具