在地图golang中设置值,键入错误,不确定如何修复
我试图在golang中将一个key:value对设置为本地缓存 设置新对时,由于条目值的结构,我收到一个错误在地图golang中设置值,键入错误,不确定如何修复,go,Go,我试图在golang中将一个key:value对设置为本地缓存 设置新对时,由于条目值的结构,我收到一个错误 type Cache struct { cache map[string]*entry } type entry struct { value string err error } func NewCache() *Cache { return &Cache{cache: make(map[string]*entry)} } func (
type Cache struct {
cache map[string]*entry
}
type entry struct {
value string
err error
}
func NewCache() *Cache {
return &Cache{cache: make(map[string]*entry)}
}
func (c *Cache) Set(key string, value *entry) (string, string) {
c.cache[key] = value
return key, value
}
我可以看出,值对需要错误和值类型输出,但我不知道如何在使用该错误值时设置值,如果这样做有意义的话
更新包括get函数,
我错过了什么?感谢你的指点
我的目的是能够将值字符串从条目传递到映射中
我刚刚开始重新编写一个更简单的版本,但是如果我能让Set功能正常工作,我认为这种格式是有意义的:S缓存上的
Set
方法声明了(string,string)
的返回值,但是您返回键,值
,其中第一个是字符串,但是第二种类型是*条目
,而不是字符串
。要解决此问题,请将字符串
作为第二个返回值返回,或者将第二个声明的返回类型更改为*条目
给定变量名value
(type*entry
)和entry
类型上的value
(typestring
)字段,不清楚此处所需的行为。但是,由于entry
是一个私有类型,我猜您实际上不需要将*entry
类型的值传递给publicSet
方法
也许这就是你想要的:
func(c*Cache)集(键字符串、值字符串、错误)(字符串、字符串){
c、 cache[key]=&条目{值,err}
返回键、值
}
但也许你的意思是:
func(c*Cache)集(键字符串,ent*entry)(字符串,*entry){
c、 缓存[键]=ent
返回键
}
尽管在这两种情况下,返回值似乎都是不必要的,因为它们与给定的值相同。你可以考虑制作<代码> SET>代码>一个无效方法。你是否打算将<代码> *条目< /代码>传递到<代码> SET>代码>函数?让我扩展代码,这个错误是get函数的MORESO,我将包含它。从CACH.SET返回一个编译错误。目前还不清楚返回值的意图是什么,因此很难提出修复方案。否则代码会编译。Set怎么会失败呢?@LeCoda你猜呢?你似乎真的没有问题。如果您愿意,请告诉我们,我们很乐意提供帮助。谢谢您。我现在正在尝试实现这一点,仍然会遇到一些类型错误,如果是这样的话,我将测试并询问更多问题okay@LeCoda是的,让我知道进展如何
func (c *Cache) Get(key string) (string, error) {
res, ok := c.cache[key]
if !ok {
res = &entry{}
// res.value, res.err = f()
c.cache[key] = res
}
return res.value, res.err