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

新手上路,请多包涵

哪种方法最好(最常用)来测试非空字符串(在 Go 中)?

 if len(mystring) > 0 { }

或者:

 if mystring != "" { }

或者是其他东西?

原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 553
2 个回答

这两种风格都在 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 编译器在这两种情况下确实生成了相同的代码。

原文由 ANisus 发布,翻译遵循 CC BY-SA 4.0 许可协议

这似乎是过早的微优化。编译器可以自由地为这两种情况或至少为这两种情况生成相同的代码

if len(s) != 0 { ... }

if s != "" { ... }

因为语义显然是平等的。

原文由 zzzz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题