登录
首页 >  Golang >  Go问答

Go 如何进行字符串比较?

来源:Golang技术栈

时间:2023-04-10 12:30:50 317浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《Go 如何进行字符串比较?》,主要介绍了golang,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

http://golang.org/ref/spec#Comparison_operators

Go 支持字符串比较,没有任何特殊功能。Go 运行时是否在幕后工作以比较字符串文字?

正确答案

正如您在以下程序集转储中看到的那样,runtime.eqstring在进行短路检查以查看两个操作数是否是相同的内存中字符串(第 11 行)之后,字符串比较被委托给运行时中的函数(第 17 行):

$ cat foo.go
package main

func main() {
        a := "hello"
        b := "world"
        _ = a == b
}

$ go tool 6g -S foo.go
--- prog list "main" ---
0000 (foo.go:3) TEXT    main+0(SB),$40-0
0001 (foo.go:3) LOCALS  ,$0
0002 (foo.go:4) LEAQ    go.string."hello"+0(SB),BX
0003 (foo.go:4) MOVQ    (BX),SI
0004 (foo.go:4) MOVQ    8(BX),CX
0005 (foo.go:5) LEAQ    go.string."world"+0(SB),BX
0006 (foo.go:5) MOVQ    (BX),DX
0007 (foo.go:5) MOVQ    8(BX),AX
0008 (foo.go:6) JMP     ,11
0009 (foo.go:6) MOVQ    $1,AX
0010 (foo.go:6) JMP     ,23
0011 (foo.go:6) CMPQ    CX,AX
0012 (foo.go:6) JNE     ,22
0013 (foo.go:6) MOVQ    SI,(SP)
0014 (foo.go:6) MOVQ    CX,8(SP)
0015 (foo.go:6) MOVQ    DX,16(SP)
0016 (foo.go:6) MOVQ    AX,24(SP)
0017 (foo.go:6) CALL    ,runtime.eqstring+0(SB)
0018 (foo.go:6) MOVBQZX 32(SP),BX
0019 (foo.go:6) CMPB    BX,$0
0020 (foo.go:6) JEQ     ,22
0021 (foo.go:6) JMP     ,9
0022 (foo.go:6) MOVQ    $0,AX
0023 (foo.go:7) RET     ,

--- prog list "init" ---
0024 (foo.go:7) TEXT    init+0(SB),$0-0
0025 (foo.go:7) MOVBQZX initdone路+0(SB),AX
0026 (foo.go:7) LOCALS  ,$0
0027 (foo.go:7) CMPB    AX,$0
0028 (foo.go:7) JEQ     ,34
0029 (foo.go:7) CMPB    AX,$2
0030 (foo.go:7) JNE     ,32
0031 (foo.go:7) RET     ,
0032 (foo.go:7) CALL    ,runtime.throwinit+0(SB)
0033 (foo.go:7) UNDEF   ,
0034 (foo.go:7) MOVB    $2,initdone路+0(SB)
0035 (foo.go:7) RET     ,

除非您正在使用编译器或运行时,否则这不应该让您太担心:只需使用规范定义的运算符,并期望与字符串长度的比较为 O(n)。

今天带大家了解了golang的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表