Pointers go映射,键是字符串,值是指向结构的指针
在这个go代码段中,键是字符串,值是指向结构的指针。 在这里使用Contry指针有什么好处? 我是否可以删除“*”并实现相同的行为? 例如:Pointers go映射,键是字符串,值是指向结构的指针,pointers,go,Pointers,Go,在这个go代码段中,键是字符串,值是指向结构的指针。 在这里使用Contry指针有什么好处? 我是否可以删除“*”并实现相同的行为? 例如: 谢谢。您可以使用指针或值实现相同的行为 var store = map[string]Country 使用指针将在映射中存储结构的地址,而不是整个结构的副本。对于像您的示例中这样的小结构,这不会有多大区别。对于较大的结构,它可能会影响性能。您可以使用指针或值实现相同的行为 var store = map[string]Country 使用指针将在映
谢谢。您可以使用指针或值实现相同的行为
var store = map[string]Country
使用指针将在映射中存储结构的地址,而不是整个结构的副本。对于像您的示例中这样的小结构,这不会有多大区别。对于较大的结构,它可能会影响性能。您可以使用指针或值实现相同的行为
var store = map[string]Country
使用指针将在映射中存储结构的地址,而不是整个结构的副本。对于像您的示例中这样的小结构,这不会有多大区别。对于更大的结构,它可能会影响性能。我对go的了解不多,但我的直接想法是,这将使重新平衡映射(如有必要)成为一项成本更高的操作(需要移动更多内存)。由于同样的原因(需要复制完整的结构,而不是指向结构的指针),获取和设置数据的成本也会变得更高。我对go的具体知识并不了解,但我的直接想法是,这将使重新平衡映射(如有必要)成为一项成本更高的操作(需要移动更多内存)。由于同样的原因(需要复制完整的结构,而不是指向结构的指针),获取和设置数据的成本也会变得更高,特别是对于这样的小结构,不使用指针的性能会更好。与往常一样,如果/当性能是一个问题时,不要猜测,基准测试。唯一需要注意的是,如果没有指针(
store2[“country1”].Name=“X”
),就不能直接为值赋值。特别是对于这样的小结构,不使用指针会更好。与往常一样,如果/当性能是一个问题时,不要猜测基准。唯一需要注意的是,没有指针(store2[“country1”].Name=“X”
)就不能直接赋值。
package main
import (
"fmt"
)
type Country struct {
Code string
Name string
}
func main() {
var store = make(map[string]*Country)
var store2 = make(map[string]Country)
c1 := Country{"US", "United States"}
store["country1"] = &c1
store2["country1"] = c1
fmt.Println(store["country1"].Name) // prints "United States"
fmt.Println(store2["country1"].Name) // prints "United States"
}