第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果在 Go 中構(gòu)造,則無法在其中初始化結(jié)構(gòu)

如果在 Go 中構(gòu)造,則無法在其中初始化結(jié)構(gòu)

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

2 回答

?
青春有我

TA貢獻1784條經(jīng)驗 獲得超8個贊

該{是公認的開始Block,終止的解析SimpleStmt。犯下這一決定之后,編譯器決定,作為一個SimpleStmt,aTime := time.Time是無效的,因為time.Time沒有可分配的值。但是,解析器嘗試對{.


版本 withnew有效,因為它不包含{字符,因此避免以這種方式混淆解析器。


您還可以通過將其括在括號中來使用文字格式,因為塊不能合法地從表達式的中間開始,因此這也適用:


if defaultTime := (time.Time{}); aTime != defaultTime {

    // ...

}

gofmt 給出了有用的消息“預(yù)期的布爾表達式,找到了簡單的語句(復(fù)合文字周圍缺少括號?)”,但奇怪的是,go 編譯器本身沒有。


查看完整回答
反對 回復(fù) 2021-11-08
?
湖上湖

TA貢獻2003條經(jīng)驗 獲得超2個贊

我不認為我要建議的一定是更好的解決方案。但是對于您的用例,您可以嘗試簡潔


if !aTime.IsZero() {

    // ...

}

ymmv


查看完整回答
反對 回復(fù) 2021-11-08
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號