Gin简介
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,它和其他第三方 Golang 库一样用go get -u github.com/gin-gonic/gin 下载gin,然后import导入即可
gin路由
func init() {
router := gin.Default()
v1 := router.Group("/v1")
{
v1.POST("/login", login)
v1.POST("/put", etcdPut)
v1.GET("/get", etcdGet)
v1.GET("/etcdGetAll", etcdGetAll)
v1.DELETE("/etcdDELETE", etcdDELETE)
}
router.Run("127.0.0.1:8080")
}
func login(c *gin.Context) {
// 127.0.0.1:8080/v1/login?id=1234&page=1 -H name=amber
id := c.Query("id")
page := c.DefaultQuery("page", "0")
name := c.PostForm("name")
}
gin上传文件
func init() {
router := gin.Default()
// 限制上传文件大小 (默认 32 MiB)
router.MaxMultipartMemory = 8 // 8 MiB
router.POST("/upload", upload)
router.Run("127.0.0.1:8080")
}
func upload(c *gin.Context) error {
file, _ := c.FormFile("file")
log.Println(file.Filename)
// 上传文件到指定的路径
c.SaveUploadedFile(file, "/home/file")
return c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))
})
etcd存取
import "go.etcd.io/etcd/clientv3"
// 获取etcd数据
func etcdGet(key string) (string, error) {
ctx, cancel := context.WithTimeout(context.Background(), opTimeout)
defer cancel()
kvc := clientv3.NewKV(GetEtcdClient())
response, err := kvc.Get(ctx, key)
if err != nil {
logCtx.Errorf("Get etcd error: %v", err)
return "", err
}
if len(response.Kvs) != 1 {
errStr := " etcd key not found"
logCtx.Errorf(errStr)
return "", errors.New(errStr)
}
return string(response.Kvs[0].Value), nil
}
// 存储etcd
func etcdPut(key, value string) (*clientv3.PutResponse, error) {
ctx, cancel := context.WithTimeout(context.Background(), opTimeout)
defer cancel()
kvc := clientv3.NewKV(GetEtcdClient())
resp, err := kvc.Put(ctx, key, value)
if err != nil {
logCtx.Errorf("put etcd error: %v", err)
return nil, err
}
logCtx.Infof("Save to etcd success: key ", key, " value: ", value)
return resp, nil
}
// 获取etcd所有数据,加上--prefix
func etcdGetAll(key string) ([]string, error) {
ctx, cancel := context.WithTimeout(context.Background(), opTimeout)
defer cancel()
response, err := kvc.Get(ctx, key, clientv3.WithPrefix())
if len(response.Kvs) == 0 {
errStr := "etcd not found"
logCtx.Errorf(errStr)
return nil, errors.New(errStr)
}
result := make(map[string]string, 0)
for _, kv := range response.Kvs {
result[string(kv.Key)] = string(kv.Value)
}
return result, nil
}
// etcd删除key
func etcdDelete(key string) error {
ctx, cancel := context.WithTimeout(context.Background(), opTimeout)
defer cancel()
kvc := clientv3.NewKV(GetEtcdClient())
resp, err := kvc.Delete(ctx, key)
if err != nil {
logCtx.Errorf("delete etcd error: %v", err)
return nil, err
}
return nil
}