нет, как вы сами сказали, это d, c, b, a
так что д 3
тогда c вызывает f () и d равно 4, поэтому c равно 4
следующий b вызывает f () и d равен 5, поэтому b равен 5
наконец, a - это c + b или 9
и d оказался в 5 из-за побочных эффектов в f ()
Вот вывод компилятора соответствующего раздела
Как вы можете видеть, он устанавливает 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-версией go1.12.4 linux / amd64, с тем же результатом