Go 通过来自通道值的指针为局部变量赋值
代码如下: 在第45、46和47行中,有三种不同的方法从MessageBroker中提取值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作为指向结构的指针。在您的特定情况下,它是
//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"