如何在不覆盖现有数据的情况下将键值添加到变量?

我正在尝试仅使用一个变量创建一个简单的缓存,但我不知道如何添加到它而不每次都完全覆盖它。


这是一个片段:


package main


var store map[string][]byte


type Routes struct{}


func NewRoutes() *Routes {

    return &Routes{}

}


func (c *Routes) SetRoutes(key string, routes []byte) error {

    store[key] = routes


    return nil

}


func main() {

    routes := NewRoutes()


    routes.SetRoutes("key", []byte("routes"))

}

这将导致panic: assignment to entry in nil map. 我可以make()用来创建商店切片 - 但我不想这样做,因为我相信我会丢失切片中已经存在的任何东西,使其变得无用。


我怎么能这样做呢?


https://go.dev/play/p/NbqSbSTx5ER


子衿沉夜
浏览 62回答 2
2回答

jeck猫

您正在创建一个全局变量存储,而您很可能希望将其封装在您的 Routes 结构中:package maintype Routes struct{    store map[string][]byte}func NewRoutes() *Routes {    return &Routes{        store: make(map[string][]byte),    }}func (c *Routes) SetRoutes(key string, routes []byte) error {    c.store[key] = routes    return nil}func main() {    routes := NewRoutes()    routes.SetRoutes("key", []byte("routes"))}请参阅:https ://go.dev/play/p/3M4kAfya6KE 。这确保地图的范围限定为您的 Routes 结构并且仅初始化一次。

跃然一笑

您可以检查它是否存在nil以及make是否存在:func (c *Routes) SetRoutes(key string, routes []byte) error {    if store == nil {        store = make(map[string][]byte)    }    store[key] = routes    return nil}或者,只需在mainfunc 中进行:func main() {    store = make(map[string][]byte)    routes := NewRoutes()    routes.SetRoutes("key", []byte("routes"))}
打开App,查看更多内容
随时随地看视频慕课网APP