本文介绍如何使用 Go 标准库中的 strings.Map 与 unicode 包,高效、安全地将字符串中每个字母的大小写进行反转,而非简单全转大写或小写。
本文介绍如何使用 go 标准库中的 `strings.map` 与 `unicode` 包,高效、安全地将字符串中每个字母的大小写进行反转,而非简单全转大写或小写。
在 Go 语言中,标准库并未提供直接“反转字母大小写”的内置函数(如 Python 的 swapcase()),但借助 strings.Map 和 unicode 包,我们可以优雅且高效地实现这一功能。
strings.Map 接收一个字符映射函数(类型为 func(rune) rune)和源字符串,对字符串中每个 Unicode 码点(rune)依次调用该函数,并构建新字符串。这天然支持多字节字符(如中文、emoji),避免了按字节操作可能引发的乱码问题。
核心逻辑如下:
以下是完整可复用的实现:
package mainimport ( "fmt" "strings" "unicode")func swapCase(s string) string { return strings.Map(func(r rune) rune { switch { case unicode.IsLower(r): return unicode.ToUpper(r) case unicode.IsUpper(r): return unicode.ToLower(r) } return r }, s)}func main() { fmt.Println(swapCase("Hello, 世界! GOLANG")) // 输出: hELLO, 世界! golang fmt.Println(swapCase("aBc123@#")) // 输出: AbC123@#}
⚠️ 注意事项:
总结:虽然 Go 没有开箱即用的 swapCase 函数,但通过组合 strings.Map 与 unicode 判断/转换函数,我们能写出简洁、健壮、符合 Unicode 标准的实现——这正是 Go “组合优于继承”设计哲学的典型体现。