type Country struct {
Code string
Name string
}
var store = map[string]*Country{}
在这个go代码片中,键是字符串,值是指向结构体的指针。 这里使用Contry的指针有什么好处? 我可以删除“*”并获得相同的行为吗? 如:走图,键是字符串,值是指向结构的指针
var store = map[string]Country
谢谢。
type Country struct {
Code string
Name string
}
var store = map[string]*Country{}
在这个go代码片中,键是字符串,值是指向结构体的指针。 这里使用Contry的指针有什么好处? 我可以删除“*”并获得相同的行为吗? 如:走图,键是字符串,值是指向结构的指针
var store = map[string]Country
谢谢。
您可以使用指针或值实现相同的行为。
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"
}
使用指针将结构的地址存储在映射中,而不是整个结构的副本。对于你的例子中的小结构来说,这并没有太大的区别。如果结构较大,则可能会影响性能。
特别是,使用像这样的小结构,*不使用指针会更好。与往常一样,如果/当表现是一个问题时,不要猜测,基准。 –
唯一需要注意的是,如果没有指针('store2 [“country1”] .Name =“X”'),你不能直接赋值。 – OneOfOne
我并没有专门的知识,但我的直接想法是,这将使平衡地图(如果有必要)成本更高的操作(需要移动更多内存)。由于相同的原因,获取和设置数据也会变得更加昂贵(需要复制完整的结构,而不是指向结构的指针) – Dave