英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论