我正在学习Go,到目前为止对它印象深刻。我已经阅读了golang.org上的所有在线文档,并且在Chrisnall的“ The
Go编程语言短语”中走了一半。我了解渠道的概念,并认为它们将非常有用。但是,我一定错过了一些重要的过程,因为我看不到单向通道的意义。
如果我正确地解释了它们,则只能在其上接收只读通道,而只能在其上传输只写通道,那么为什么有一个可以发送但从不接收的通道?可以将它们从一个“方向”投射到另一个“方向”吗?如果是这样,又没有实际约束又有什么意义呢?它们只是对渠道目的客户代码的提示吗?
可以将通道设置为对接收该通道的任何人都是只读的,而发送方仍然可以使用双向通道进行写入。例如:
func F() <-chan int {
// Create a regular, two-way channel.
c := make(chan int)
go func() {
defer close(c)
// Do stuff
c <- 123
}()
// Returning it, implicitely converts it to read-only,
// as per the function return value.
return c
}
呼叫的人F()
都会收到一个只能阅读的频道。这对于避免在编译时潜在地滥用通道很有用。因为只读/只写通道是不同的类型,所以编译器可以使用其现有的类型检查机制来确保调用者不会尝试将内容写入没有业务写入的通道。
主要内容:单向通道的声明格式,单向通道的使用例子,time包中的单向通道,关闭 channelGo语言的类型系统提供了单方向的 channel 类型,顾名思义,单向 channel 就是只能用于写入或者只能用于读取数据。当然 channel 本身必然是同时支持读写的,否则根本没法用。 假如一个 channel 真的只能读取数据,那么它肯定只会是空的,因为你没机会往里面写数据。同理,如果一个 channel 只允许写入数据,即使写进去了,也没有丝毫意义,因为没有办法读取到里面的数据。所谓的单
当使用通道作为函数的参数时,你可以指定该通道是只读的还是只写的。这种设置有时候会提高程序的参数类型安全。 package main import "fmt" // 这个ping函数只接收能够发送数据的通道作为参数,试图从这个通道接收数据 // 会导致编译错误,这里只写的定义方式为`chan<- string`表示这个类型为 // 字符串的通道为只写通道 func ping(pings chan<-
问题内容: 我希望能够将Java应用程序中以字符串表示的许多连续命令发送到SSH服务器以执行。我应该使用: -要么- 问题答案: 使用shell通道启动外壳(在Unix上为sh或bash或类似的东西,在Windows上通常为cmd.exe)并创建控制台(如果在本地运行它们,则在屏幕上看到的内容)。您有一个提示,您可以将其解析或用于检测命令是否完成。 使用命令通道,将为每个命令启动一个shell实例
问题内容: 在学习Go的依赖管理时,我经常听到用“ vendor”这个词作为动词。示例:“您的应用程序供应商的依赖性…” 在这种情况下,对 供应商的依赖性 意味着什么? 例子: “与您的应用程序一起提供的依赖项” 资料来源:https : //devcenter.heroku.com/articles/getting- started-with-go#declare-app- dependenci
问题内容: 我正在寻找有关Google Go语言的信息。在“ A Go of Go”中,他们具有以下代码: 但是什么和 意味着什么呢? 您可以在http://tour.golang.org/#14上查看所有代码 问题答案: 它们是按位移位运算符。表示 x ×2 y ,而表示 x ×2 -y 或等效地x÷2 y。这些运算符通常用于操作值的二进制表示形式,就像十进制的10的幂一样,乘或除以2的幂分别具
问题内容: 我是Go编程语言的新手。 我注意到Go中有一些奇怪的地方:我认为它在Python中使用并替代了,但是当我在Go中使用时,它也是可行的。 和之间有什么区别? 问题答案: 是分配。有关Go中分配的更多信息:分配 和在变量声明中使用时的细微差别。 Go中变量声明的一般形式是: 上面的声明创建一个特定类型的变量,为其添加名称,并设置其初始值。 无论是或可以省略,但不能同时使用。 例如: 被称为