code: func Lookup(i interface{}, path ...string) (reflect.Value, error) {
  	value := reflect.ValueOf(i)
  	var parent reflect.Value
  	var err error
  
  	for i, part := range path {
  		parent = value
  
  		value, err = getValueByName(value, part)
  		if err == nil {
  			continue
  		}
  
  		if !isAggregable(parent) {
  			break
  		}
  
  		value, err = aggreateAggregableValue(parent, path[i:])
  
  		break
  	}
  
  	return value, err
  }
docs: // Lookup performs a lookup into a value, using a path of keys. The key should
  // match with a Field or a MapIndex. For slice you can use the syntax key[index]
  // to access a specific index. If one key owns to a slice and an index is not
  // specificied the rest of the path will be apllied to evaley value of the
  // slice, and the value will be merged into a slice.