代码拉取完成,页面将自动刷新
package boltbrowserweb
import (
"bytes"
"fmt"
"github.com/boltdb/bolt"
"github.com/gin-gonic/gin"
)
var Db *bolt.DB
func Index(c *gin.Context) {
c.Redirect(301, "/web/html/layout.html")
}
func CreateBucket(c *gin.Context) {
if c.PostForm("bucket") == "" {
c.String(200, "no bucket name | n")
}
Db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte(c.PostForm("bucket")))
b = b
if err != nil {
return fmt.Errorf("create bucket: %s", err)
}
return nil
})
c.String(200, "ok")
}
func DeleteBucket(c *gin.Context) {
if c.PostForm("bucket") == "" {
c.String(200, "no bucket name | n")
}
Db.Update(func(tx *bolt.Tx) error {
err := tx.DeleteBucket([]byte(c.PostForm("bucket")))
if err != nil {
c.String(200, "error no such bucket | n")
return fmt.Errorf("bucket: %s", err)
}
return nil
})
c.String(200, "ok")
}
func DeleteKey(c *gin.Context) {
if c.PostForm("bucket") == "" || c.PostForm("key") == "" {
c.String(200, "no bucket name or key | n")
}
Db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte(c.PostForm("bucket")))
b = b
if err != nil {
c.String(200, "error no such bucket | n")
return fmt.Errorf("bucket: %s", err)
}
err = b.Delete([]byte(c.PostForm("key")))
if err != nil {
c.String(200, "error Deleting KV | n")
return fmt.Errorf("delete kv: %s", err)
}
return nil
})
c.String(200, "ok")
}
func Put(c *gin.Context) {
if c.PostForm("bucket") == "" || c.PostForm("key") == "" {
c.String(200, "no bucket name or key | n")
}
Db.Update(func(tx *bolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte(c.PostForm("bucket")))
b = b
if err != nil {
c.String(200, "error creating bucket | n")
return fmt.Errorf("create bucket: %s", err)
}
err = b.Put([]byte(c.PostForm("key")), []byte(c.PostForm("value")))
if err != nil {
c.String(200, "error writing KV | n")
return fmt.Errorf("create kv: %s", err)
}
return nil
})
c.String(200, "ok")
}
func Get(c *gin.Context) {
res := []string{"nok", ""}
if c.PostForm("bucket") == "" || c.PostForm("key") == "" {
res[1] = "no bucket name or key | n"
c.JSON(200, res)
}
Db.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte(c.PostForm("bucket")))
if b != nil {
v := b.Get([]byte(c.PostForm("key")))
res[0] = "ok"
res[1] = string(v)
fmt.Printf("Key: %s\n", v)
} else {
res[1] = "error opening bucket| does it exist? | n"
}
return nil
})
c.JSON(200, res)
}
type Result struct {
Result string
M map[string]string
}
func PrefixScan(c *gin.Context) {
res := Result{Result: "nok"}
res.M = make(map[string]string)
if c.PostForm("bucket") == "" {
res.Result = "no bucket name | n"
c.JSON(200, res)
}
count := 0
if c.PostForm("key") == "" {
Db.View(func(tx *bolt.Tx) error {
// Assume bucket exists and has keys
b := tx.Bucket([]byte(c.PostForm("bucket")))
if b != nil {
c := b.Cursor()
for k, v := c.First(); k != nil; k, v = c.Next() {
res.M[string(k)] = string(v)
if count > 2000 {
break
}
count++
}
res.Result = "ok"
} else {
res.Result = "no such bucket available | n"
}
return nil
})
} else {
Db.View(func(tx *bolt.Tx) error {
// Assume bucket exists and has keys
b := tx.Bucket([]byte(c.PostForm("bucket"))).Cursor()
if b != nil {
prefix := []byte(c.PostForm("key"))
for k, v := b.Seek(prefix); bytes.HasPrefix(k, prefix); k, v = b.Next() {
res.M[string(k)] = string(v)
if count > 2000 {
break
}
count++
}
res.Result = "ok"
} else {
res.Result = "no such bucket available | n"
}
return nil
})
}
c.JSON(200, res)
}
func Buckets(c *gin.Context) {
res := []string{}
Db.View(func(tx *bolt.Tx) error {
return tx.ForEach(func(name []byte, _ *bolt.Bucket) error {
b := []string{string(name)}
res = append(res, b...)
return nil
})
})
c.JSON(200, res)
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。