我对指针只有最低限度的熟悉,但它们似乎是重用内存并避免制作额外对象副本的好方法。
假设我有一个 struct
type MyObject struct {
field1 int
field2 string
field3 []string // some long list of long strings
}
我想要两个maps允许通过字段值有效查找相应对象的方法
myField1Map := make(map[int]*MyObject)
myField2Map := make(map[string]*MyObject)
或者
myField1Map := make(map[int]MyObject)
myField2Map := make(map[string]MyObject)
假设我选择前者
myObj1 := new(MyObject)
myObj1.field1 = 1
myObj1.field2 = "Mufasaaaaa"
myObj1.field3 = []string{// lots and lots of long strings}
myField1Map[myObj1.field1] = myObj1
myField2Map[myObj1.field2] = myObj1
我在空间效率方面的权衡是什么?在我看来,我正在节省空间,因为两个映射都引用了内存中的同一个对象。
一件很酷的事情是,我在Go Playground 中设置了一个玩具问题。我可以在我的一个地图中更改一个值的字段,它会显示在另一个地图中。如果假设这些映射之一是指向对象的指针值的主键,这似乎是一个不错的奖励。
有人可以澄清这是否是思考指针和空间的正确方法。另外,这是一种常见的做法吗?我在作弊Go吗?
收到一只叮咚
相关分类