If you are using gin to build a webservice, and you want to use memcached to store your data, you will search some articles about how to create a middleware to do that. After read some articles, I only found this middleware. But I got no luck. I cannot get a value from a key on one endpoint after I set it on another endpoint. So I didn’t use gin session and create my own middleware with gomemcache.
package main
import (
"github.com/gin-gonic/gin"
"github.com/bradfitz/gomemcache/memcache"
)
func MCMiddleware(mc *memcache.Client) gin.HandlerFunc {
return func(c *gin.Context) {
c.Set("mem", mc)
c.Next()
}
}
func main() {
r := gin.Default()
mc := memcache.New("127.0.0.1:11211")
r.Use(MCMiddleware(mc))
r.GET("/set", func(c *gin.Context) {
mem, _ := c.MustGet("mem").(*memcache.Client)
mem.Set(&memcache.Item{Key: "somekey", Value: []byte("somevalue")})
c.String(200, "ok\n")
})
r.GET("/get", func(c *gin.Context) {
mem, _ := c.MustGet("mem").(*memcache.Client)
data, _ := mem.Get("somekey")
c.String(200, string([]byte(data.Value))+"\n")
})
r.Run(":8000")
}
Then you can set and get a value from a key on all endpoints.
linx@crawler ~ $ curl localhost:8000/set ok linx@crawler ~ $ curl localhost:8000/get somevalue