昨天完成了 db.Connect()
用來建立跟資料庫的連線,今天要實作的是最重要的 讀/寫 資料庫
這邊要實作 db.Insert
負責把單筆資料寫入資料庫:在 LedisDB 裡每個 list(array)都要有一個名字(key),幫這個 list 取名叫做 fishes
,然後把字串加到 list 裡面,這樣就完成了 db.Insert
這邊用到的 db.RPush
功能是把元素加到 list 裡面,類似 JS 的 array.push(elem)
還有 Python 的 list.append(elem)
var db *ledis.DB
func Insert(s string) {
// fishes 是這個 list 的名字(key)
fishes := []byte("fishes")
// 把字串 s 加到 fishes 裡面
db.RPush(fishes, []byte(s))
}
讀取的部分稍微複雜一點,要先取得 list 的長度然後取出所有資料,最後再把每一筆資料都轉成 string 回傳
這邊會用到兩個 LedisDB 的功能:db.LLen
用來取得 list 的長度,類似某些語言的 len(list)
或 list.length
,而 db.LRange
則是用來取得某個範圍內的元素,搭配 list 長度就可以拿到所有元素
func SelectAll() []string {
fishes := []byte("fishes")
// 取得 list 的長度 -> nFish
nFish, err := db.LLen(fishes)
// 從 list 裡面取得所有資料
datas, err := db.LRange(fishes, 0, int32(nFish))
// 因為取出來的每一筆資料型別都是 []byte
// 把每筆資料都轉成 string 放到 strs 裡面
strs := []string{}
for _, data := range datas {
strs = append(strs, string(data))
}
return strs
}
實際測試一下,先新增兩個字串到資料庫內,然後一次用 for loop 印出來
func main() {
db.Connect()
db.Insert("Hello World")
db.Insert("I'm Larry Lu")
for _, str := range db.SelectAll() {
fmt.Println(str)
}
}
今天完成了 讀/寫 資料庫,commit 放在這裡,其實還有很多功能(ex 清空資料庫)可以自己實作看看,有任何問題都歡迎提問,沒問題的話明天就要用今天寫好的這兩個 function 來 儲存/讀取 帳號密碼了~