Setting Get metadata method to return both an interface as well as an error to remove panic.

This commit is contained in:
Nick Gerakines 2014-07-03 15:17:24 -04:00
parent 5eb0e10a78
commit 108bfb4470
2 changed files with 8 additions and 13 deletions

View File

@ -38,14 +38,14 @@ func main() {
})) }))
authorized.POST("admin", func(c *gin.Context) { authorized.POST("admin", func(c *gin.Context) {
user := c.Get("user").(string) user, _ := c.Get("user")
// Parse JSON // Parse JSON
var json struct { var json struct {
Value string `json:"value" binding:"required"` Value string `json:"value" binding:"required"`
} }
if c.EnsureBody(&json) { if c.EnsureBody(&json) {
DB[user] = json.Value DB[user.(string)] = json.Value
c.JSON(200, gin.H{"status": "ok"}) c.JSON(200, gin.H{"status": "ok"})
} }
}) })

15
gin.go
View File

@ -8,7 +8,6 @@ import (
"fmt" "fmt"
"github.com/julienschmidt/httprouter" "github.com/julienschmidt/httprouter"
"html/template" "html/template"
"log"
"math" "math"
"net/http" "net/http"
"path" "path"
@ -283,18 +282,14 @@ func (c *Context) Set(key string, item interface{}) {
// Returns the value for the given key. // Returns the value for the given key.
// It panics if the value doesn't exist. // It panics if the value doesn't exist.
func (c *Context) Get(key string) interface{} { func (c *Context) Get(key string) (interface{}, error) {
var ok bool
var item interface{}
if c.Keys != nil { if c.Keys != nil {
item, ok = c.Keys[key] item, ok := c.Keys[key]
} else { if ok {
item, ok = nil, false return item, nil
} }
if !ok || item == nil {
log.Panicf("Key %s doesn't exist", key)
} }
return item return nil, errors.New("Key does not exist.")
} }
/************************************/ /************************************/