在通道变量初始化后建立缓冲通道

Posted

技术标签:

【中文标题】在通道变量初始化后建立缓冲通道【英文标题】:Make buffered channel after channel variable initialisation 【发布时间】:2017-08-10 03:28:00 【问题描述】:

我可以像这样初始化一个缓冲的字符串通道

queue := make(chan string, 10)

但是如何在 Go 的结构中初始化缓冲通道?基本上我想将内存分配给缓冲的字符串通道。但最初在结构中我只是定义它,在结构初始化中,我想为它分配内存

type message struct 

  queue *chan string
// or will it be 
//queue []chan string



func (this *message) init() 

  queue = make(chan string,10)

  this.queue = &queue


【问题讨论】:

不要打电话给你的接收者this。给它一个有意义的名字。类型的第一个字母很常见,所以m 在你的情况下。 【参考方案1】:

这样做:

type message struct 
   queue chan string


func (m *message) init() 
    m.queue = make(chan string, 10)

在这种情况下不需要获取通道的地址。

【讨论】:

【参考方案2】:

同理:

type message struct 
    queue chan string


func (m *message) init() 
    m.queue = make(chan string, 10)

但您似乎对什么是频道有点困惑。 *chan string 在 Go 中是一个有效的构造,但通常是不必要的。只需使用普通的chan string--不需要指针。

// 还是会 //队列[]chan字符串

这将是一个通道数组,这也是有效的,但在这种情况下不是您想要的。

通道不是数组。它更像是一个流(当您读取文件或网络连接时可能会得到)。但也不要把这个类比走得太远。

【讨论】:

以上是关于在通道变量初始化后建立缓冲通道的主要内容,如果未能解决你的问题,请参考以下文章

Go语言之通道

Go36-10,11-通道

JAVA NIO系列 Buffer 解读

WebRTC[41] - WebRTC 传输通道的建立过程解析

NIO 入门

JavaNio之ByteBuffer