在 Golang 中实现 Cache::remember 方法

  • 项目需要把部分代码移植到Golang, 之前用Laravel封装的写起来很舒服,在Golang里只能自动动手实现.
  • 一开始想的是使用interface实现,但是遇到了一个坑,Golang里的组合是一个虚假的继承

  • 如上c.say()代码,在别的语言里应该是输出i am child才对, 而Golang不一样,查了一下Golang的资料才能理解https://golang.org/ref/spec#Selectors
  • 大致意思是说,通过x.f调用f方法或者属性时,从当前或者嵌套匿名结构体由浅到深的去调用,而不会去寻找上级
  • 比如child1没有Say方法,会进入到匿名结构体Parent找到Say方法,然后调用
  • child也没有Say方法,同样去调用ParentSay方法,这时候Say是通过Parent调用的, 当在Say里调用s.Name方法,并不能找到child, 所以还是会调用到ParentName方法

  • 然后自己整理和同事一起写了大致的remember方法

点赞

发表评论