Go 实例isn'上的字符串数组被替换;t反射
我有一个具有数组字段的结构实例。当goroutine替换实例上的数组时,该实例的所有其他句柄仍保留原始数组。为什么会这样?我应该更改什么,以便下面的Go 实例isn'上的字符串数组被替换;t反射,go,Go,我有一个具有数组字段的结构实例。当goroutine替换实例上的数组时,该实例的所有其他句柄仍保留原始数组。为什么会这样?我应该更改什么,以便下面的容器的实例将反映在goroutine上所做的更改 这里还反映了一个简单的例子: 这是因为您正在使用切片的值。返回通过复制返回到main的切片的值。Goroutine然后执行并更新原始值。进行以下更改: func Create() *Container { // return a pointer to container // instanc
容器的实例将反映在goroutine上所做的更改
这里还反映了一个简单的例子:
这是因为您正在使用切片的值。返回通过复制返回到main
的切片的值。Goroutine然后执行并更新原始值。进行以下更改:
func Create() *Container { // return a pointer to container
// instance is now initialized and points to a Container value
// (i.e. instance is of type *Container)
instance := &Container{
values: []string{"initial value"},
}
go func() {
instance.values = []string{"modified value"}
fmt.Print("values updated")
}()
return instance
}
既然main有一个指向上述实例的指针
,那么goroutine所做的修改将是可见的
例如:
此外,要创建新值,可以直接使用类型的名称:
instance := Container{ // instance is of type Container
// ...
}
要创建和初始化类型的指针,请使用:
instance := &Container{ // instance is of type *Container
// ...
}
这样做是多余的:
instance := *&Container{ // instance is of type Container. Same as first declaration
// ...
}
没有指向容器的“句柄”(指针)
——您是按值返回结构,而不是指向它的指针。
instance := *&Container{ // instance is of type Container. Same as first declaration
// ...
}