code: func (v *evalVisitor) evalPath(ctx reflect.Value, parts []string, exprRoot bool) (reflect.Value, bool) {
  	partResolved := false
  
  	for i := 0; i < len(parts); i++ {
  		part := parts[i]
  
  		// "[foo bar]"" => "foo bar"
  		if (len(part) >= 2) && (part[0] == '[') && (part[len(part)-1] == ']') {
  			part = part[1 : len(part)-1]
  		}
  
  		ctx = v.evalField(ctx, part, exprRoot)
  		if !ctx.IsValid() {
  			break
  		}
  
  		// we resolved at least one part of path
  		partResolved = true
  	}
  
  	return ctx, partResolved
  }
docs: // evalPath evaluates all path parts with given context