在Go中testing空string的最佳方法是什么?

testing非空string(在Go中)哪种方法是最好的(更具有习惯性)?

if len(mystring) > 0 { } 

要么:

 if mystring != "" { } 

或者是其他东西?

这两种风格都在Go的标准库中使用。

 if len(s) > 0 { ... } 

可以在strconv包中find: http : strconv

 if s != "" { ... } 

可以在encoding/json包中find: http : //golang.org/src/pkg/encoding/json/encode.go

两者都是惯用的,而且足够清晰。 这更多是个人品味和清晰度的问题。

拉斯考克斯写在一个golang坚果线程 :

使代码清晰的那个。
如果我要看元素x我通常写
len(s)> x,即使对于x == 0,但是如果我关心的话
“是这个特定的string”我倾向于写s ==“”。

假设一个成熟的编译器将被编译是合理的
len(s)== 0和s ==“”转换成相同的高效代码。
现在6g等编译s ==“”到一个函数调用
而len(s)== 0是不是,但这是我的待办事项清单来解决。

使代码清晰。

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

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

 if s != "" { ... } 

因为语义显然是平等的。

检查长度是一个很好的答案,但是你也可以考虑一个“空”的string,它也只是空格。 不是“技术上”空的,但如果你在意检查:

 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!") } } 

假设应该删除空白空间和所有前后空白:

 import "strings" if len(strings.TrimSpace(s)) == 0 { ... }