code: func (d *Decoder) DecodeString() (rv string, err error) {
  	dataLen, err := d.DecodeUint()
  	if err != nil {
  		return
  	}
  	if uint(dataLen) > uint(maxInt) {
  		err = unmarshalError("DecodeString", ErrOverflow, errMaxSlice, dataLen)
  		return
  	}
  	opaque, err := d.DecodeFixedOpaque(int32(dataLen))
  	if err != nil {
  		return
  	}
  	rv = string(opaque)
  	return
  }
docs: // DecodeString treats the next bytes as a variable length XDR encoded string
  // and returns the result as a string.  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