为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
忽然笑 2021-06-17 18:15:47
哪种方法最适合(更惯用)测试非空字符串(在 Go 中)?if len(mystring) > 0 { }或者:if mystring != "" { }或者是其他东西?
查看完整描述

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 编译器在两种情况下都会生成相同的代码。


查看完整回答
反对 回复 2021-06-28
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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

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

if s != "" { ... }

因为语义显然是平等的。


查看完整回答
反对 回复 2021-06-28
?
开心每一天1111

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

  }

}


查看完整回答
反对 回复 2021-06-28
  • 3 回答
  • 0 关注
  • 212 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信