
在 Go 语言开发中,字符串比较是最常见的操作之一。但你真的了解它的底层原理和正确使用姿势吗?
在 Go 语言中,字符串是完全可以比较大小的。Go 提供了多种字符串比较的方式,每种方式都有其特定的使用场景。
Go 支持直接使用比较运算符(==, !=, <, >, <=, >=)对字符串进行比较:
s1, s2, s3 := "apple", "banana", "apple"
fmt.Println(s1 == s3) // true
fmt.Println(s1 < s2) // true,按字典序比较标准库 strings 包提供的比较函数,返回 -1/0/1 三种结果:
result := strings.Compare("apple", "banana") // -1fmt.Println(strings.EqualFold("GoLang", "golang")) // trueGo 采用字典序比较:
fmt.Println("a" < "b") // true
fmt.Println("a" < "aa") // true(长度影响)
fmt.Println("A" < "a") // true(ASCII: 65 < 97)字符串比较时会先比较长度,长度相同才逐字节比较内容,这是性能优化的快速路径。
性能建议:
== 运算符(更快)strings.Compare()Go 字符串按字节比较,视觉相同的字符串可能字节不同:
s1 := "é" // 两个字节
s2 := "é" // 三个字节('e' + 组合音标)
fmt.Println(s1 == s2) // false!var s1 string // 零值,空字符串
s2 := ""
fmt.Println(s1 == s2) // true
fmt.Println(len(s1) == 0) // true,推荐方式fruits := []string{"banana", "apple", "cherry"}
sort.Strings(fruits)
fmt.Println(fruits) // [apple banana cherry]func uniqueStrings(strs []string) []string {
if len(strs) == 0 {
return strs
}
sort.Strings(strs)
result := []string{strs[0]}
for i := 1; i < len(strs); i++ {
if strs[i] != strs[i-1] {
result = append(result, strs[i])
}
}
return result
}Go 语言中的字符串比较功能强大且易用: