回答

收藏

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

技术问答 技术问答 315 人阅读 | 0 人回复 | 2023-09-12

测试非空字符串( Go 中)?* m) l2 I( V$ l# ]( J+ a% T
    ; x% H* t& O# u1 W+ d, Z
  • if len(mystring) > code]或者:' p3 a3 H' J2 j
  • [code]if mystring != "" { }code]还是别的?$ E9 b! i0 B( k
  •                                                                
    / w( D1 ~) z3 b# V/ A
  •     解决方案:                                                               
    7 ?6 S. R0 X& |' Y) e9 {, ]
  •                                                                 这两种风格都在 Go 在标准库中使用。[code]if len(s) > 0 { ... }# N+ U6 e6 I. ]0 G2 z# C# e$ q+ f
可以在strconv包中找到:http : //golang.org/src/pkg/strconv/atoi.go
) Y/ V1 }" \3 ]
    if s != "" { ... }/ x3 Y* e) R( y* \
可以在encoding/json包中找到:http : //golang.org/src/pkg/encoding/json/encode.go
+ ]% J6 j1 m$ O) G两者都很常见,而且足够清楚。这更多的是个人品味和清晰度的问题。/ X. Z$ W1 o' @1 s5 [$ ]2 R
Russ Cox 在golang-nuts 线程写道:
% z$ d+ `  W! T' A使代码清晰的那个。  y' H8 K0 U+ M$ D7 N" o* w- g  a
假如要查元素 x,我通常会写
5 j2 ]$ Q2 H3 Ylen(s) > x,即使 x == 0,但如果我关心的话
' [/ J1 e8 m# `6 c倾向于写 s == “”。! w9 j9 D' Q8 Z+ ^4 ~8 y
可以合理地假设成熟的编译器会将
8 ~, ?6 G- P7 e0 R' ~- f9 @. Z8 |len(s) == 0 和 s == “”编译成相同的高效代码。
7 l5 X+ t2 n! U5 U5 y. e+ g4 X
1 o% T4 D. x( z0 T$ W让代码清晰。) _5 o+ C0 _5 Q: D1 J+ Z
正如答案所指出的,Go 编译器在两种情况下生成相同的代码:. B) Z9 u/ ]/ N: Z% _. c  O( Y
截至目前,Go 编译器在两种情况下都会生成相同的代码,所以这是一个品味问题。GCCGo 确实生成了不同的代码,但很少有人使用它,所以我不担心。
+ ]6 t; ^# D! c* \8 t" [6 p. V# }https://godbolt.org/z/fib1x1
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则