Pointers 附加到作为映射中的值的切片

Pointers 附加到作为映射中的值的切片,pointers,go,slice,go-map,Pointers,Go,Slice,Go Map,我想附加到一个切片,它是一个映射的值,例如给定mmap[string][]string: if values, exists := m[key]; exists { values = append(values, v) // I don't want to call: m[key] = values } else { m[key] = []string{ v } } 这显然不起作用,因此我尝试执行以下操作,而不是按原样追加值: valuesPtr := &values

我想附加到一个切片,它是一个映射的值,例如给定m
map[string][]string

if values, exists := m[key]; exists {
    values = append(values, v)
//  I don't want to call: m[key] = values
} else {
    m[key] = []string{ v }
}
这显然不起作用,因此我尝试执行以下操作,而不是按原样追加值:

valuesPtr := &values
*values = append(values, v)
但这也不行。我怎么能那样做呢?

你不能那样做


append
返回一个新切片,因为切片可能需要调整大小才能完成追加。您必须更新地图以使用新返回的切片,这在没有按键引用的情况下是无法完成的。

检查如果我知道最大可能容量,并且我创建的切片足够大,该怎么办?或者,是否可以使用数组值而不是切片值创建贴图?那么我能使用指针吗?@isapir,容量在这里并不重要。附加值时,切片的长度会发生变化,使其成为不同的值,即使底层数组没有重新定位。我是否应该删除此问题?有2张反对票,所以除非投票结果至少为0,否则我想我会删除它。有趣的是,有人对答案投了赞成票,所以这对一些人(包括我自己)来说似乎很有用。