code: func readListField(
  	r FieldReader, addr []string, schema *Schema) (FieldReadResult, error) {
  	addrPadded := make([]string, len(addr)+1)
  	copy(addrPadded, addr)
  	addrPadded[len(addrPadded)-1] = "#"
  
  	// Get the number of elements in the list
  	countResult, err := r.ReadField(addrPadded)
  	if err != nil {
  		return FieldReadResult{}, err
  	}
  	if !countResult.Exists {
  		// No count, means we have no list
  		countResult.Value = 0
  	}
  
  	// If we have an empty list, then return an empty list
  	if countResult.Computed || countResult.Value.(int) == 0 {
  		return FieldReadResult{
  			Value:    []interface{}{},
  			Exists:   countResult.Exists,
  			Computed: countResult.Computed,
  		}, nil
  	}
  
  	// Go through each count, and get the item value out of it
  	result := make([]interface{}, countResult.Value.(int))
  	for i, _ := range result {
  		is := strconv.FormatInt(int64(i), 10)
  		addrPadded[len(addrPadded)-1] = is
  		rawResult, err := r.ReadField(addrPadded)
  		if err != nil {
  			return FieldReadResult{}, err
  		}
  		if !rawResult.Exists {
  			// This should never happen, because by the time the data
  			// gets to the FieldReaders, all the defaults should be set by
  			// Schema.
  			rawResult.Value = nil
  		}
  
  		result[i] = rawResult.Value
  	}
  
  	return FieldReadResult{
  		Value:  result,
  		Exists: true,
  	}, nil
  }
docs: // readListField is a generic method for reading a list field out of a
  // a FieldReader. It does this based on the assumption that there is a key
  // "foo.#" for a list "foo" and that the indexes are "foo.0", "foo.1", etc.
  // after that point.