3 回答
TA贡献1826条经验 获得超6个赞
这两种风格都在 Go 的标准库中使用。
if len(s) > 0 { ... }
可以在strconv
包中找到:http : //golang.org/src/pkg/strconv/atoi.go
if s != "" { ... }
可以在encoding/json
包中找到:http : //golang.org/src/pkg/encoding/json/encode.go
两者都是惯用的,并且足够清楚。这更多是个人品味和清晰度的问题。
Russ Cox 在golang-nuts 线程中写道:
使代码清晰的那个。
如果我要查看元素 x,我通常会写
len(s) > x,即使 x == 0,但如果我关心
“它是这个特定的字符串吗”,我倾向于写 s == ""。可以合理地假设成熟的编译器会将
len(s) == 0 和 s == ""编译成相同的高效代码。
...让代码清晰。
正如Timmmm 的回答中所指出的,Go 编译器在两种情况下都会生成相同的代码。
TA贡献1804条经验 获得超8个赞
这似乎是过早的微优化。编译器可以自由地为这两种情况或至少为这两种情况生成相同的代码
if len(s) != 0 { ... }
和
if s != "" { ... }
因为语义显然是平等的。
TA贡献1836条经验 获得超13个赞
检查长度是一个很好的答案,但您也可以考虑一个也只是空格的“空”字符串。不是“技术上”空的,但如果你想检查:
package main
import (
"fmt"
"strings"
)
func main() {
stringOne := "merpflakes"
stringTwo := " "
stringThree := ""
if len(strings.TrimSpace(stringOne)) == 0 {
fmt.Println("String is empty!")
}
if len(strings.TrimSpace(stringTwo)) == 0 {
fmt.Println("String two is empty!")
}
if len(stringTwo) == 0 {
fmt.Println("String two is still empty!")
}
if len(strings.TrimSpace(stringThree)) == 0 {
fmt.Println("String three is empty!")
}
}
- 3 回答
- 0 关注
- 212 浏览
添加回答
举报