Go 通过来自通道值的指针为局部变量赋值

Go 通过来自通道值的指针为局部变量赋值,go,Go,代码如下: 在第45、46和47行中,有三种不同的方法从MessageBroker中提取值 //var mb MessageBroker = *<-in mb := *<-in //mb := <-in //var mb MessageBroker=*查看函数的声明: func (c *MyGui) Receive(in <-chan *MessageBroker) { 因此,前两个选项是相同的,但第三个选项将使用mb作为指向结构的指针。在您的特定情况下,它是

代码如下:

在第45、46和47行中,有三种不同的方法从MessageBroker中提取值

//var mb MessageBroker = *<-in
mb := *<-in
//mb := <-in    

//var mb MessageBroker=*查看函数的声明:

func (c *MyGui) Receive(in <-chan *MessageBroker) {
因此,前两个选项是相同的,但第三个选项将使用
mb
作为指向结构的指针。在您的特定情况下,它是否是指针并不重要;您正在打印
消息

但是,如果要更改消息,则不同之处在于:

mb.Message := "New message"
如果mb的类型为
MessageBroker
,是一个结构值,那么更改只针对本地mb变量,但在Receive函数之外没有任何影响


但是,如果mb的类型为
*MessageBroker
,则您将更改通过通道接收到的对象的相同实例。

现在我得到了解释我的第四个示例(未发布)背后行为的信息:var mb*MessageBroker=Yes,这是示例3的显式版本。我还补充说,这两者可能会产生什么样的后果。就你而言,没有。但在其他情况下,这肯定会有所不同。
mb.Message := "New message"