func main() {
bb := []byte{0x20, 0x0, 0x16, 0x21, 0x20, 0x0, 0x32, 0x0, 0xd, 0x0, 0x22, 0x0, 0x1e, 0x4, 0x40, 0x4, 0x33, 0x4, 0x30, 0x4}
fmt.Printf("%v\n",UTF16BytesToString(bb,binary.LittleEndian))
fmt.Printf("%#v\n",UTF16BytesToString(bb,binary.LittleEndian))
}
func UTF16BytesToString(b []byte, o binary.ByteOrder) string {
utf := make([]uint16, (len(b)+(2-1))/2)
for i := 0; i+(2-1) < len(b); i += 2 {
utf[i/2] = o.Uint16(b[i:])
}
if len(b)/2 < len(utf) {
utf[len(utf)-1] = utf8.RuneError
}
return string(utf16.Decode(utf))
}
P.S. хотелось бы больше деталей по области развития, м.б. небольшую часть этого плана показать, просто на абстрактные вопросы всегда будет абстрактный ответ.