package util import ( "io" "reflect" "unsafe" ) func WriteFull(writer io.Writer, buf []byte) error { total := len(buf) for pos := 0; pos < total; { n, err := writer.Write(buf[pos:]) if err != nil { return err } pos += n } return nil } func String2Bytes(s string) []byte { stringHeader := (*reflect.StringHeader)(unsafe.Pointer(&s)) bh := reflect.SliceHeader{ Data: stringHeader.Data, Len: stringHeader.Len, Cap: stringHeader.Len, } return *(*[]byte)(unsafe.Pointer(&bh)) } func Bytes2String(b []byte) string { sliceHeader := (*reflect.SliceHeader)(unsafe.Pointer(&b)) sh := reflect.StringHeader{ Data: sliceHeader.Data, Len: sliceHeader.Len, } return *(*string)(unsafe.Pointer(&sh)) }