marshaller.go
func (m *Marshaller) MarshalString(s string) {
	if m.Error != nil {
		return
	}
	if len(m.Data) < m.offset+4+len(s)+Padding(len(s)) {
		m.Error = io.ErrShortBuffer
		return
	}

	m.MarshalUint32(uint32(len(s)))
	m.offset += copy(m.Data[m.offset:], s)
	m.offset += copy(m.Data[m.offset:], padBytes[:Padding(len(s))])
}
func (m *Marshaller) MarshalString(s string) {
	if m.Error != nil {
		return
	}
	if len(m.Data) < m.offset+4+len(s)+Padding(len(s)) {
		m.Error = io.ErrShortBuffer
		return
	}

	m.MarshalUint32(uint32(len(s)))
	m.offset += copy(m.Data[m.offset:], s)
	m.offset += copy(m.Data[m.offset:], padBytes[:Padding(len(s))])
}
// MarshalString appends the string to the buffer, with a size prefix and
// correct padding.