我想檢查一個(gè)結(jié)構(gòu)是否為空,即它的所有字段是否都設(shè)置為其默認(rèn)值。以下按預(yù)期工作:package mainimport "fmt"type MyStruct struct { field1 string field2 int}func main() { var mine MyStruct empty := MyStruct{} // Check if mine is empty. if mine == empty { fmt.Print("mine is empty") }}我想稍微縮短一下,所以我將空結(jié)構(gòu)初始化移動(dòng)到 if 語句中:func main() { var mine MyStruct // Check if mine is empty. if mine == MyStruct{} { fmt.Print("mine is empty") }}但這不起作用:syntax error: unexpected }, expecting := or = or comma. 盡管看起來與第一個(gè)示例幾乎相同,但即使以下內(nèi)容也不起作用:func main() { var mine MyStruct // Check if mine is empty. if empty := MyStruct{}; mine == empty { fmt.Print("mine is empty") }}編譯器說:syntax error: need trailing comma before newline in composite literal。但是,我發(fā)現(xiàn)以下代碼可以工作:func main() { var mine MyStruct // Check if mine is empty. if mine == *new(MyStruct) { fmt.Print("mine is empty") }}有人可以解釋為什么編譯器不接受上述兩個(gè)示例嗎?當(dāng)我們在做的時(shí)候:檢查“空”結(jié)構(gòu)的慣用方法是什么?最后一個(gè)例子有效,但對我來說看起來有點(diǎn)奇怪。
- 1 回答
- 0 關(guān)注
- 265 瀏覽
添加回答
舉報(bào)
0/150
提交
取消