想知道在 GoLang 中是否保證了結構體初始化的執行順序。
以下代碼是否總是產生
obj.a == 1而且obj.b == 2還是不確定的行為?
num := 0
nextNumber := func() int {
num = 1
return num
}
type TwoNumbers struct {
a int
b int
}
obj := TwoNumbers{
a: nextNumber(),
b: nextNumber(),
}
uj5u.com熱心網友回復:
評估順序已指定。
代碼TwoNumbers{a: nextNumber(), b: nextNumber()}是一個復合文字運算式。呼叫nextNumber()是運算式中的運算元。
規范一般來說是關于運算式的:
...在計算運算式、賦值或 return 陳述句的運算元時,所有函式呼叫、方法呼叫和通信操作都按詞法從左到右的順序計算。
fielda的運算元在 fieldb的運算元之前計算,因為field的操作數在 field的運算元a的左側b。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364104.html
標籤:走
