package utils import ( "crypto/rand" "errors" "fmt" "io" "net/url" "regexp" "strings" "unicode" ) // GenerateRandomAlphanumericString generates a random alphanumeric string of the given length func GenerateRandomAlphanumericString(length int) (string, error) { const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" if length <= 0 { return "", errors.New("length must be a positive integer") } // The algorithm below is adapted from https://stackoverflow.com/a/35615565 const ( letterIdxBits = 6 // 6 bits to represent a letter index letterIdxMask = 1< 0 { result.WriteByte('_') } result.WriteRune(unicode.ToLower(r)) } return result.String() } var camelCaseToScreamingSnakeCaseRe = regexp.MustCompile(`([a-z0-9])([A-Z])`) func CamelCaseToScreamingSnakeCase(s string) string { // Insert underscores before uppercase letters (except the first one) snake := camelCaseToScreamingSnakeCaseRe.ReplaceAllString(s, `${1}_${2}`) // Convert to uppercase return strings.ToUpper(snake) }