19 lines
383 B
Go
19 lines
383 B
Go
|
package main
|
||
|
|
||
|
import "unicode"
|
||
|
|
||
|
func ToSnake(in string) string {
|
||
|
runes := []rune(in)
|
||
|
length := len(runes)
|
||
|
|
||
|
var out []rune
|
||
|
for i := 0; i < length; i++ {
|
||
|
if i > 0 && unicode.IsUpper(runes[i]) && ((i+1 < length && unicode.IsLower(runes[i+1])) || unicode.IsLower(runes[i-1])) {
|
||
|
out = append(out, '_')
|
||
|
}
|
||
|
out = append(out, unicode.ToLower(runes[i]))
|
||
|
}
|
||
|
|
||
|
return string(out)
|
||
|
}
|