为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
子衿沉夜 2022-11-23 15:50:27

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


这是一个片段:


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


查看完整描述

2 回答

?
jeck猫

TA贡献1633条经验 获得超7个赞

您正在创建一个全局变量存储,而您很可能希望将其封装在您的 Routes 结构中:


package main


type 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 结构并且仅初始化一次。


查看完整回答
反对 回复 2022-11-23
?
跃然一笑

TA贡献1533条经验 获得超6个赞

您可以检查它是否存在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"))

}


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信