Golang|groupcache
groupcache 是 memcached 作者 Brad Fitzpatrick 用 Go 语言编写的缓存及缓存过滤库,作为 memcached 许多场景下的替代版本。
groupcache并不运行在单独的server上,而是作为library和app运行在同一进程中。在API上,groupcache最大的特点是不提供update/delete/TTL等常见操作。整体的代码很少,值得阅读和学习。
……记录所学所思所想,专注于Go语言、软件架构
groupcache 是 memcached 作者 Brad Fitzpatrick 用 Go 语言编写的缓存及缓存过滤库,作为 memcached 许多场景下的替代版本。
groupcache并不运行在单独的server上,而是作为library和app运行在同一进程中。在API上,groupcache最大的特点是不提供update/delete/TTL等常见操作。整体的代码很少,值得阅读和学习。
……Go 语言是静态类型的,每个变量在编译期有且只能有一个确定的、已知的类型,即变量的静态类型。静态类型在变量声明的时候就已经确定了,无法修改。
那么为什么我们还需要反射呢?这是因为有些事情只有在运行时才知道。比如你定义了一个函数,它有一个interface{}类型的参数,这也就意味着调用者可以传递任何类型的参数给这个函数。在这种情况下,如果你想知道调用者传递的是什么类型的参数,就需要用到反射。如果你想知道一个结构体有哪些字段和方法,也需要反射。
……Go 协程(Goroutine)是与其他函数同时运行的函数。可以认为 Go 协程是轻量级的线程,由 Go 运行时来管理。
对于 协程(用户级线程),这是对内核透明的,也就是系统并不知道有协程的存在,是完全由用户自己的程序进行调度的,因为是由用户程序自己控制,那么就很难像抢占式调度那样做到强制的 CPU 控制权切换到其他进程/线程,通常只能进行 协作式调度,需要协程自己主动把控制权转让出去之后,其他协程才能被执行到。
……本小节学习go语言的方法和接口,虽然go语言没有提供类的设计,但可以通过结构体来类比实现对应功能,而类具有对应的方法,同理结构体也可以有自己的函数,我们称之为方法,具体定义是在函数前面加上接收者。
……本小节学习go语言的map,map里面存储着键值对,通过键来快速获取对应的值,我们使用map[T]T
格式来定义集合,需要注意的是key的限制,map中的key可以是bool,数字,string,指针,channel还可以是只包含前面几个类型的接口,结构体,数组,但是不能使用slice,map还有function作为key,因为这几个没法用==来判断。
本小节学习go语言的数组和切片,一门编程语言肯定少不了基本数据结构数组,go语言中还有另外的类型切片,和数组的区别是数组的大小是固定的,是不可改动的,而切片是可以动态扩展的。
……本小节介绍go语言中的结构体,由于go语言没有面向对象的设计,但我们可以通过结构体去实现面向对象的继承、封装、多态特性。
在介绍结构体之前,还需要了解一下go语言中指针的相关概念和用法。和c语言一样,如果一个变量是指针,则表示这个变量存储的数据是指向其目标变量的存储地址。
……最新使用Python编写一些处理脚本,感觉与golang之间的语法开始模糊,因此决定根据官方文档,写一下golang的入门教程,顺便复习一下相关语法巩固基础。
包是golang里的最基本组成部件,go程序就是由一个个包组装起来的,例如程序入口main包。
……