近期在寫 activedrouter專案的時候需求乙個快取模型,要求快取模型支援不同驅動,例如:memory、file、redis、mysql,實現思路**如下:
cache.go檔案,定義快取對外介面
//activedrouter
//快取驅動介面定義
//可以自定義擴充套件驅動型別 預設是 memory driver
package cache
import (
"./driver"
)//cache介面宣告
type cacher inte***ce )
get(k string) (inte***ce{}, bool)
del(k string)
has(k string) bool
}//create memory cache
//type "file" or "memory"
func newcache(cachetype string) cacher
case "file":
}case "mysql":
}case "redis":
}case "mongodb":
}} return nil
}
driver.go 實現驅動,這裡我只利用map實現了,具體其他驅動可自行實現
//activedrouter
//快取驅動介面定義
//可以自定義擴充套件驅動型別 預設是 memory cache
package driver
//容器介面宣告
type containerer inte***ce ) containerer
erasekvpair(k inte***ce{}) containerer
pushkvmaps(maps ...map[string]inte***ce{}) containerer
resetkvpair(k string, v inte***ce{}) containerer
resetoraddkvpair(k string, v inte***ce{}) containerer
resetkvpairs(kvmaps map[string]inte***ce{}) containerer
resetoraddkvpairs(kvmaps map[string]inte***ce{}) containerer
exist(k inte***ce{}) bool
getdata() *map[string]inte***ce{}
}//基於記憶體實現的快取
type cacheimpl struct
func (self *cacheimpl) exist(k inte***ce{}) bool
func (self *cacheimpl) getstorage() containerer
//set
func (self *cacheimpl) set(k string, v inte***ce{})
//get
func (self *cacheimpl) get(k string) (inte***ce{}, bool)
//erase
func (self *cacheimpl) del(k string)
//has
func (self *cacheimpl) has(k string) bool
//map實現的記憶體驅動
type mapcontainer struct
}//建立資料channer
func newmapcontainer() *mapcontainer )}
}func (this *mapcontainer) pushkvpair(k, v inte***ce{}) containerer else
return this
}func (this *mapcontainer) exist(k inte***ce{}) bool
func (this *mapcontainer) erasekvpair(k inte***ce{}) containerer else
return this
}func (this *mapcontainer) pushkvmaps(maps ...map[string]inte***ce{}) containerer
} return this
}func (this *mapcontainer) resetkvpair(k string, v inte***ce{}) containerer
return this
}func (this *mapcontainer) resetoraddkvpair(k string, v inte***ce{}) containerer
func (this *mapcontainer) resetkvpairs(kvmaps map[string]inte***ce{}) containerer
} return this
}func (this *mapcontainer) resetoraddkvpairs(kvmaps map[string]inte***ce{}) containerer
return this
}func (this *mapcontainer) getdata() *map[string]inte***ce{}
golang 自定義型別
1.8 自定義型別 可將型別分為命名和未命名兩 大類。命名型別包括 bool int string 等,而 array slice map 等和具體元素型別 長度等有關,屬於未命名型別。具有相同宣告的未命名型別被視為同 一型別。具有相同基型別的指標。具有相同元素型別和 長度的 array。具有相同元...
C 自定義屬性實現
在用c 寫程式的時候,可能會用到自定義屬性來傳遞一些資料,這次就來簡單看看自定義屬性的用法 1.寫自定義屬性類 a.宣告自定義屬性類,繼承自attribute類 b.定義所需的建構函式,欄位和屬性 c.新增attributeusageattribute屬性 attributeusage attrib...
C 自定義String的實現
這個在面試或筆試的時候常問到或考到。已知類string的原型為 class string 請編寫string的上述4個函式。普通建構函式 string string const char str else string的析構函式 string string void 拷貝建構函式 string st...