當(dāng)我注意到以下代碼段沒有編譯時(shí),我感到非常驚訝:aTime := time.Time{}if defaultTime := time.Time{} ; aTime != defaultTime {}編譯器返回:輸入 time.Time 不是表達(dá)式defaultTime := time.Time 用作值未定義:defaultTime這里的目的是測試aTime變量是否設(shè)置為其默認(rèn)值。如果我獲得結(jié)構(gòu)的指針(defaultTime := &time.Time{}),它也不會編譯。但是,如果我在 if 構(gòu)造之外初始化 defaultTime,或者使用 new() 內(nèi)置函數(shù)進(jìn)行初始化,它確實(shí)會編譯:aTime := time.Time{}if defaultTime := new(time.Time) ; aTime != *defaultTime {}從我到處讀到的內(nèi)容來看,new(myStruct)它應(yīng)該完全等同于&myStruct{}。當(dāng)我解釋它時(shí),defaultValue := time.Time {}有資格作為SimpleStmt(特別是Assignment),如If 語句規(guī)范中詳述。盡管我盡了最大努力,但我對這種行為沒有任何解釋。如果有人能讓我的頭停止旋轉(zhuǎn),我將不勝感激。
如果在 Go 中構(gòu)造,則無法在其中初始化結(jié)構(gòu)
繁華開滿天機(jī)
2021-11-08 18:21:27