hbolive:背景:刚过完 go 语法,还没入门那种,现在有个 go-cache 的例子,有 3 个问题请教大家
目的:设置缓存,在缓存未过期时从缓存读取数据,如果读取失败,则将缓存内容写入缓存;最后将内容打印出来。
package main
import (
"fmt"
"time"
"github.com/patrickmn/go-cache"
)
func main() {
var id cateId = 20
data := id.getCache()
fmt.Println(data)
}
type cateId int
func (id cateId) getCache() string {
cacheName := "cache_20"
//cacheName := "cache_" + string(id)
c := cache.New(30*time.Second, 20*time.Second)
value, found := c.Get(cacheName)
if found {
return value.(string)
} else {
c.Set(cacheName, "testdata_20", cache.DefaultExpiration)
return "testdata_200"
//return "testdata_" + string(id) //始终输出 testdata_
}
}
问题 1:编译后执行得到的结果始终是 testdata_200,缓存 30 秒过期,第一次执行得到 testdata_200 正常,为什么第二次执行得到的不是缓存数据 testdata_20 呢?莫非 go-cache 在程序运行结束,缓存也消失了?
问题 2://return "testdata_" + string(id) //始终输出 testdata_,而不是输出 testdata_20 ?在 windows 命令行窗口 20 是个乱码,其他终端下运行直接没有
问题 3:我这样写符合大众习惯吗?毕竟这个写法跟我以前用 PHP/Python 差别挺大的。。
PHP 为例:
$data = $this->_getCache(20);
protected _getCache(cateId)
{
$data = Cache->get('cacheName');
if( !$data ){
$data = '一些数据'
Cache->set('cacheName', $data);
}
return $data;
}
先谢谢大家!
rimutuyuan:1. cache 存储在内存,程序退出后内存都释放掉了,key 也不存在了
添加以下代码可以实现你期望的结果
data2 := id.getCache()
fmt.Println(data2)
hjahgdthab750:实际在用的时候似乎有两种形式,但是不知道那种更优或者各自的场景 type A { X string B string } func (a *A) SetX (error) {} func (a A) GetX (string,error) {} func NewA() { a = A{} // 第一种 a.X,err = a.Ge…
招一个 Go 开发,国庆节前有效-美团iamecho:HC:招一个 Go 开发,国庆节前有效。工作 2 年以上。 团队:美团基础架构调度系统团队,Kubernetes 与云原生,面试对云相关没什么要求,后期感兴趣可以内部慢慢转向云相关。 需要可以简历发送到:iamwgliang#gmail.com
Go 中怎么实现类似 Java 里的枚举类型?woostundy:用定义常量来实现枚举类型,太简易了。没法通过值找到枚举名称,没法约束值范围,没法输出所有可选枚举值。 试过在自定义类型上面加 String(), All() 方法,但代码又多又丑陋。 有什么好的写法或者第三方包能实现吗?scnace:code generation (逃 lbp0200:直接复制粘贴了type Direction intc…
请问有什么比较火,并且好用的 go 的 job 调度框架吗?secretName:由于公司技术栈的原因,所以现在打算在 go 里面找一个 job 调度框架。 找了一圈,只发现 gocron 貌似还可以的样子,但是调度只支持 shell 与 http,连异步任务都没有,我这里常用的任务有时候调度时间通常都在好几小时,这样显然是满足不了要求的。 难道只能自己造一个轮子了吗?sirius1024:robfig/cron
请大家推荐高质量,清晰,简单的 Vue 和 Go 的代码hambman:参考的项目虽然代码 work, 但是代码比较冗余,结构不好,也没有好的工程习惯,比如单元测试请大家推荐好的代码库,可以参考学习。gowk:http://teaos.cn/主页有 Demo 链接,Go+Vue+Semantic UI 不管是 Go 还是 Javascript 代码都简单明了,极具参考价值,而且 UI 比较优雅