فهرست منبع

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

Nick Gerakines 12 سال پیش
والد
کامیت
108bfb4470
2فایلهای تغییر یافته به همراه8 افزوده شده و 13 حذف شده
  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) {
 	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"})
 		}
 		}
 	})
 	})

+ 6 - 11
gin.go

@@ -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{} {
-	var ok bool
-	var item interface{}
+func (c *Context) Get(key string) (interface{}, error) {
 	if c.Keys != nil {
 	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.")
 }
 }
 
 
 /************************************/
 /************************************/