在通道变量初始化之后创建缓冲通道。

huangapple go评论82阅读模式
英文:

Make buffered channel after channel variable initialisation

问题

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

queue := make(chan string, 10)

但是如何在Go语言的结构体中初始化一个带缓冲的通道呢?基本上,我想要为一个带缓冲的字符串通道分配内存。但是在结构体中,我只想定义它,在结构体初始化时,我想要为它分配内存。

type message struct {
  queue chan string
}

func (this *message) init() {
  this.queue = make(chan string, 10)
}

你可以在结构体中直接定义一个通道类型的字段,然后在结构体的初始化方法中为该字段分配内存。在初始化方法中,使用make函数来创建一个带缓冲的通道,并将其赋值给结构体字段。注意,不需要使用指针类型来表示通道。

英文:

I can initialise a buffered string channel like this

queue := make(chan string, 10)

But how to initialise a buffered channel in a struct in Go ? Basically I want to allocate memory to a buffered string channel. But initially in the struct I would just define it and in struct initialisation, I would like to allocate memory to it

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

}

答案1

得分: 6

做这个:

type message struct {
   queue chan string
}

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

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

英文:

Do this:

type message struct {
   queue chan string
}

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

There's no need to take the address of the channel in this scenario.

答案2

得分: 2

同样的方式:

type message struct {
   queue chan string
}

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

但是你似乎对通道的概念有些困惑。在Go语言中,*chan string是一个有效的构造,但通常是不必要的。只需使用普通的chan string即可,不需要使用指针。

> // 或者是
> // queue []chan string

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

通道不是一个数组。它更像是一个流(就像你从文件或网络连接中读取到的流)。但也不要过分拿这个类比。

英文:

The same way:

type message struct {
   queue chan string
}

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

But you seem to be a bit confused about what a channel is. *chan string is a valid construct in Go, but usually unnecessary. Just use a normal chan string--no need for a pointer.

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

This would be an array of channels, which is also valid, but not what you want in this case.

A channel is not an array. It's more like a stream (as you might get when you read a file, or a network connection). But don't take that analogy too far, either.

huangapple
  • 本文由 发表于 2017年3月19日 00:11:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/42876720.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定