哪种方法最好(最常用)来测试非空字符串(在 Go 中)? if len(mystring) > 0 { } 或者: if mystring != "" { } 或者是其他东西? 原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议
这两种风格都在 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 许可协议
这两种风格都在 Go 的标准库中使用。
可以在
strconv
包中找到: http ://golang.org/src/pkg/strconv/atoi.go可以在
encoding/json
包中找到: http ://golang.org/src/pkg/encoding/json/encode.go两者都是惯用的并且足够清楚。这更多是个人品味和清晰度的问题。
Russ Cox 在 golang-nuts 线程 中写道:
正如 Timmmm 的回答 中所指出的,Go 编译器在这两种情况下确实生成了相同的代码。