package util import ( "crypto/md5" "encoding/hex" "time" "unsafe" ) // BytesToString converts byte slice to string without a memory allocation. func BytesToString(b []byte) string { return *(*string)(unsafe.Pointer(&b)) } // StringToBytes converts string to byte slice without a memory allocation. func StringToBytes(s string) []byte { return *(*[]byte)(unsafe.Pointer( &struct { string Cap int }{s, len(s)}, )) } func TimePtr(t time.Time) *time.Time { return &t } func BoolPtr(b bool) *bool { return &b } func Int32Ptr(i int32) *int32 { return &i } func Int64Ptr(i int64) *int64 { return &i } func StringPtr(s string) *string { return &s } func Md5Hex(str string) string { hash := md5.Sum([]byte(str)) return hex.EncodeToString(hash[:]) } func MapKeyToArray[K comparable, V any](m map[K]V) []K { values := make([]K, 0, len(m)) for k := range m { values = append(values, k) } return values }