gpt4 book ai didi

go - 变量初始化是否有错误

转载 作者:IT王子 更新时间:2023-10-29 01:28:19 25 4
gpt4 key购买 nike

作为spec of golang ,我试着写测试代码。正如规范所说,初始化顺序是 d,b,c,a,我认为 b 应该是 4,c 应该是 5,但我得到了 b == 5 和 c == 4 有什么问题吗?还是我误解了规范?

我在 go 版本中尝试如下

go version go1.12.4 linux/amd64
package main

import "fmt"

var (
a = c + b
b = f()
c = f()
d = 3
)

func f() int {
d++
return d
}

func main() {
fmt.Println("a", a)
fmt.Println("b", b)
fmt.Println("c", c)
fmt.Println("d", d)
}

结果是

result:
a 9
b 5
c 4
d 5

期待b = 4, c = 5

最佳答案

不,正如你自己所说,它确实是 d,c,b,a

所以d是3

然后c调用f(),d为4,因此c为4

接下来 b 调用 f() 并且 d 为 5,因此 b 为 5

最后,a是c+b或9

由于 f() 的副作用,d 最终为 5

这是相关部分的编译器输出

如您所见,它设置了 c( c(SB) ),然后是 b,然后是 a

  0x004b 00075 (b2.go:6)  CALL  "".f(SB)
0x0050 00080 (b2.go:6) MOVQ (SP), AX
0x0054 00084 (b2.go:6) MOVQ AX, "".c(SB)
0x005b 00091 (b2.go:5) CALL "".f(SB)
0x0060 00096 (b2.go:5) MOVQ (SP), AX
0x0064 00100 (b2.go:5) MOVQ AX, "".b(SB)
0x006b 00107 (b2.go:4) MOVQ "".c(SB), CX
0x0072 00114 (b2.go:4) ADDQ CX, AX
0x0075 00117 (b2.go:4) MOVQ AX, "".a(SB)

( 为了生成这个输出,我使用了 go tool compile -S -N abcd.go > abcd.s实际的代码行编号来自一个稍微简化的版本,删除了 fmt import 和 print 语句)

这是go版本go1.11.4 linux/amd64

用go version go1.12.4 linux/amd64 试了一样,结果一样

关于go - 变量初始化是否有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55887963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com