代码拉取完成,页面将自动刷新
package utils
import (
"fmt"
"regexp"
"strings"
"time"
)
const (
defaultMigrationTimeFormat = "20060102150405"
// DefaultMigrationFolder ...
DefaultMigrationFolder = "migrations/"
// DefaultMigrationUpSuffix ...
DefaultMigrationUpSuffix = ".up.sql"
// DefaultMigrationDownSuffix ...
DefaultMigrationDownSuffix = ".down.sql"
// DefaultMigrationTable ...
DefaultMigrationTable = "schema_migrations"
)
// MigrationFileName ...
func MigrationFileName(name string) string {
re, _ := regexp.Compile(`[^\w\d\s-_]`)
name = strings.ToLower(re.ReplaceAllString(name, ""))
name = strings.Replace(name, " ", " ", -1)
name = strings.Replace(name, " ", "_", -1)
name = strings.Replace(name, "-", "_", -1)
return fmt.Sprintf("%s_%s", time.Now().Format(defaultMigrationTimeFormat), name)
}
// ToSnakeCase ...
func ToSnakeCase(input string) string {
var sb strings.Builder
var upperCount int
for i, c := range input {
switch {
case isUppercase(c):
if i > 0 && (upperCount == 0 || nextIsLower(input, i)) {
sb.WriteByte('_')
}
sb.WriteByte(byte(c - 'A' + 'a'))
upperCount++
case isLowercase(c):
sb.WriteByte(byte(c))
upperCount = 0
case isDigit(c):
sb.WriteByte(byte(c))
default:
sb.WriteByte(byte(c))
}
}
return sb.String()
}
// nextIsLower The next character is lower case, but not the last 's'.
// nextIsLower("HTMLFile", 1) expected: "html_file"
// => true
// nextIsLower("URLs", -1) expected: "urls"
// => false
func nextIsLower(input string, i int) bool {
i++
if i >= len(input) {
return false
}
c := input[i]
if c == 's' && i == len(input)-1 {
return false
}
return isLowercase(rune(c))
}
func isDigit(r rune) bool {
return r >= '0' && r <= '9'
}
func isLowercase(r rune) bool {
return r >= 'a' && r <= 'z'
}
func isUppercase(r rune) bool {
return r >= 'A' && r <= 'Z'
}
// EscapeSqlName ...
func EscapeSqlName(isPostgres bool, name string) string {
if isPostgres || name == "" {
return name
}
return fmt.Sprintf("`%s`", strings.Trim(name, "`"))
}
// EscapeSqlNames ...
func EscapeSqlNames(isPostgres bool, names []string) []string {
ns := make([]string, len(names))
for i := range names {
ns[i] = EscapeSqlName(isPostgres, names[i])
}
return ns
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。