Forráskód Böngészése

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

Nick Gerakines 11 éve
szülő
commit
108bfb4470
2 módosított fájl, 8 hozzáadás és 13 törlés
  1. 2 2
      examples/example_basic.go
  2. 6 11
      gin.go

+ 2 - 2
examples/example_basic.go

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

+ 6 - 11
gin.go

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