Browse Source

Merge pull request #5 from DmitryBochkarev/GetOk

GetOk(r, key) (value, ok)
rodrigo moraes 13 years ago
parent
commit
708054d61e
3 changed files with 30 additions and 3 deletions
  1. +11
    -0
      context.go
  2. +16
    -2
      context_test.go
  3. +3
    -1
      doc.go

+ 11
- 0
context.go View File

@ -37,6 +37,17 @@ func Get(r *http.Request, key interface{}) interface{} {
return nil
}
// GetOk returns stored value and presence state like multi-value return of map access.
func GetOk(r *http.Request, key interface{}) (interface{}, bool) {
mutex.Lock()
defer mutex.Unlock()
if _, ok := data[r]; ok {
value, ok := data[r][key]
return value, ok
}
return nil, false
}
// Delete removes a value stored for a given key in a given request.
func Delete(r *http.Request, key interface{}) {
mutex.Lock()


+ 16
- 2
context_test.go View File

@ -37,14 +37,28 @@ func TestContext(t *testing.T) {
assertEqual(Get(r, key2), "2")
assertEqual(len(data[r]), 2)
//GetOk
value, ok := GetOk(r, key1)
assertEqual(value, "1")
assertEqual(ok, true)
value, ok = GetOk(r, "not exists")
assertEqual(value, nil)
assertEqual(ok, false)
Set(r, "nil value", nil)
value, ok = GetOk(r, "nil value")
assertEqual(value, nil)
assertEqual(ok, true)
// Delete()
Delete(r, key1)
assertEqual(Get(r, key1), nil)
assertEqual(len(data[r]), 1)
assertEqual(len(data[r]), 2)
Delete(r, key2)
assertEqual(Get(r, key2), nil)
assertEqual(len(data[r]), 0)
assertEqual(len(data[r]), 1)
// Clear()
Clear(r)


+ 3
- 1
doc.go View File

@ -37,8 +37,10 @@ The application can later access the variable using the same key you provided:
func MyHandler(w http.ResponseWriter, r *http.Request) {
// val is "bar".
val = context.Get(r, foo.MyKey)
val := context.Get(r, foo.MyKey)
// returns ("bar", true)
val, ok := context.GetOk(r, foo.MyKey)
// ...
}


Loading…
Cancel
Save