code: func (d *Decoder) DecodeString() (string, int, error) {
  	dataLen, n, err := d.DecodeUint()
  	if err != nil {
  		return "", n, err
  	}
  	if uint(dataLen) > uint(math.MaxInt32) ||
  		(d.maxReadSize != 0 && uint(dataLen) > d.maxReadSize) {
  		err = unmarshalError("DecodeString", ErrOverflow, errMaxSlice,
  			dataLen, nil)
  		return "", n, err
  	}
  
  	opaque, n2, err := d.DecodeFixedOpaque(int32(dataLen))
  	n += n2
  	if err != nil {
  		return "", n, err
  	}
  	return string(opaque), n, nil
  }
docs: // DecodeString treats the next bytes as a variable length XDR encoded string
  // and returns the result as a string along with the number of bytes actually
  // read.  Character encoding is assumed to be UTF-8 and therefore ASCII
  // compatible.  If the underlying character encoding is not compatibile with
  // this assumption, the data can instead be read as variable-length opaque data
  // (DecodeOpaque) and manually converted as needed.
  //
  // An UnmarshalError is returned if there are insufficient bytes remaining or
  // the string data is larger than the max length of a Go slice.
  //
  // Reference:
  // 	RFC Section 4.11 - String
  // 	Unsigned integer length followed by bytes zero-padded to a multiple of
  // 	four