From: Roger Peppe Date: Mon, 1 Aug 2011 16:03:35 +0000 (-0700) Subject: exp/template: make index function on maps return zero value when key not present. X-Git-Tag: weekly.2011-08-10~49 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6ed27d4770c8141e31c665089772090117c32b97;p=gostls13.git exp/template: make index function on maps return zero value when key not present. R=r CC=golang-dev https://golang.org/cl/4808065 --- diff --git a/src/pkg/exp/template/exec_test.go b/src/pkg/exp/template/exec_test.go index ed27e71223..4a13825bdb 100644 --- a/src/pkg/exp/template/exec_test.go +++ b/src/pkg/exp/template/exec_test.go @@ -297,7 +297,7 @@ var execTests = []execTest{ {"slice[WRONG]", "{{index .SI `hello`}}", "", tVal, false}, {"map[one]", "{{index .MSI `one`}}", "1", tVal, true}, {"map[two]", "{{index .MSI `two`}}", "2", tVal, true}, - {"map[NO]", "{{index .MSI `XXX`}}", "", tVal, false}, + {"map[NO]", "{{index .MSI `XXX`}}", "", tVal, true}, {"map[WRONG]", "{{index .MSI 10}}", "", tVal, false}, {"double index", "{{index .SMSI 1 `eleven`}}", "11", tVal, true}, diff --git a/src/pkg/exp/template/funcs.go b/src/pkg/exp/template/funcs.go index 58b2bafd84..1de44fcb2c 100644 --- a/src/pkg/exp/template/funcs.go +++ b/src/pkg/exp/template/funcs.go @@ -109,9 +109,10 @@ func index(item interface{}, indices ...interface{}) (interface{}, os.Error) { if !index.Type().AssignableTo(v.Type().Key()) { return nil, fmt.Errorf("%s is not index type for %s", index.Type(), v.Type()) } - v = v.MapIndex(index) - if !v.IsValid() { - return nil, fmt.Errorf("index %v not present in map", index.Interface()) + if x := v.MapIndex(index); x.IsValid() { + v = x + } else { + v = reflect.Zero(v.Type().Key()) } default: return nil, fmt.Errorf("can't index item of type %s", index.Type())