package utils import "unsafe" // Bytes2String see below func Bytes2String(b []byte) (s string) { return *(*string)(unsafe.Pointer(&b)) // pb := (*reflect.SliceHeader)(unsafe.Pointer(&b)) // ps := (*reflect.StringHeader)(unsafe.Pointer(&s)) // ps.Data = pb.Data // ps.Len = pb.Len // return } // String2Bytes zero-coy, string类型转为[]byte // 注意,这种做法下,一旦string变化,程序立马崩溃且不能recover // 谨慎,黑科技!!除非性能瓶颈,否则请使用[]byte(s) func String2Bytes(s string) (b []byte) { return *(*[]byte)(unsafe.Pointer(&s)) // pb := (*reflect.SliceHeader)(unsafe.Pointer(&b)) // ps := (*reflect.StringHeader)(unsafe.Pointer(&s)) // pb.Data = ps.Data // pb.Len = ps.Len // pb.Cap = ps.Len // return } // ValidNameRune check a rune is valid for a name format func ValidNameRune(c rune) bool { // only a-z A-Z - is valid if (c >= 97 && c <= 122) || (c >= 65 && c <= 90) || c == 95 { return true } return false }