在 Go 中测试空字符串的最佳方法是什么?

哪种方法最适合(更惯用)测试非空字符串(在 Go 中)?

if len(mystring) > 0 { }

或者:

if mystring != "" { }

或者是其他东西?


忽然笑
浏览 213回答 3
3回答

跃然一笑

这两种风格都在 Go 的标准库中使用。if len(s) > 0 { ... }可以在strconv包中找到:http : //golang.org/src/pkg/strconv/atoi.goif 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 编译器在两种情况下都会生成相同的代码。

胡说叔叔

这似乎是过早的微优化。编译器可以自由地为这两种情况或至少为这两种情况生成相同的代码if len(s) != 0 { ... }和if s != "" { ... }因为语义显然是平等的。

开心每一天1111

检查长度是一个很好的答案,但您也可以考虑一个也只是空格的“空”字符串。不是“技术上”空的,但如果你想检查:package mainimport (  "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!")  }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go