Pointers go映射,键是字符串,值是指向结构的指针

Pointers go映射,键是字符串,值是指向结构的指针,pointers,go,Pointers,Go,在这个go代码段中,键是字符串,值是指向结构的指针。 在这里使用Contry指针有什么好处? 我是否可以删除“*”并实现相同的行为? 例如: 谢谢。您可以使用指针或值实现相同的行为 var store = map[string]Country 使用指针将在映射中存储结构的地址,而不是整个结构的副本。对于像您的示例中这样的小结构,这不会有多大区别。对于较大的结构,它可能会影响性能。您可以使用指针或值实现相同的行为 var store = map[string]Country 使用指针将在映

在这个go代码段中,键是字符串,值是指向结构的指针。 在这里使用Contry指针有什么好处? 我是否可以删除“*”并实现相同的行为? 例如:


谢谢。

您可以使用指针或值实现相同的行为

 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"

}