时间:2021-05-22
本文主要给大家介绍的是关于golang单向channel语法的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:
今天闲来无事补充一下golang的语法知识,想起来看看context的用法,结果碰到了一个没见过的channel语法:
// A Context carries a deadline, cancelation signal, and request-scoped values// across API boundaries. Its methods are safe for simultaneous use by multiple// goroutines.type Context interface { // Done returns a channel that is closed when this `Context` is canceled // or times out. Done() <-chan struct{} // Err indicates why this Context was canceled, after the Done channel // is closed. Err() error // Deadline returns the time when this Context will be canceled, if any. Deadline() (deadline time.Time, ok bool) // Value returns the value associated with key or nil if none. Value(key interface{}) interface{}}注意看:Done() <- chan struct{} ,一个接口函数的声明怎么这么奇怪呢?下面来分解一下。
Done() chan struct{} :如果函数定义改成这样,其意义是,
<- chan struct{} :单独看这个表达式,我们知道如果ch := make(chan struct{}) ,那么<- ch是从管道里取出数据。但是chan struct{}是类型而不是变量,竟然能从一个类型里取数据??
其实<-chan int仍旧是一个管道类型,它叫做单向channel。如果是<-chan int,说明是只能读不能写的管道(也不能关闭),如果是chan <- int ,说明是只能写不能读的管道(可以关闭),仅此而已!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用Go语言能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
channel[通道]是golang的一种重要特性,正是因为channel的存在才使得golang不同于其它语言。channel使得并发编程变得简单容易有趣。c
前言golang的channel除了goroutine通信之外还有很多其他的功能,本文将实现一种基于channel的通用连接池。下面话不多说了,来一起看看详细的
1简介Golang是一门优秀的语言,特别是在并发编程上,得益于它的协程和channel等,非常方便易用。它通过gomodule来管理包和依赖,本文介绍如何利用它
golang的基础语法golang的基础语法和其他语言大部分都差别不大,如果我们有学习过其他语言,比如JavaScript,php,java,python等,有
看完golang的基本语法后,为了模块化编程,试用了下golang的包管理,结果真踩了几个坑,总结一下吧。一.设置$GOPATH环境变量golang和C或php