code: func DecodeString(data []byte, start int) (
  	result interface{}, index int, err error) {
  
  	if start >= len(data) || data[start] < '0' || data[start] > '9' {
  		err = errors.New("invalid string bencode")
  		return
  	}
  
  	i := find(data, start, ':')
  	if i == -1 {
  		err = errors.New("':' not found when decode string")
  		return
  	}
  
  	length, err := strconv.Atoi(string(data[start:i]))
  	if err != nil {
  		return
  	}
  
  	if length < 0 {
  		err = errors.New("invalid length of string")
  		return
  	}
  
  	index = i + 1 + length
  
  	if index > len(data) || index < i+1 {
  		err = errors.New("out of range")
  		return
  	}
  
  	result = string(data[i+1 : index])
  	return
  }
docs: // DecodeString decodes a string in the data. It returns a tuple
  // (decoded result, the end position, error).