Oli*_*ver 9 struct if-statement go
我想检查结构是否为空,即它的所有字段是否都设置为默认值.以下按预期工作:
package main
import "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")
}
}
Run Code Online (Sandbox Code Playgroud)
我想缩短这一点,所以我将空结构初始化移动到if语句中:
func main() {
var mine MyStruct
// Check if mine is empty.
if mine == MyStruct{} {
fmt.Print("mine is empty")
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用:syntax error: unexpected }, expecting := or = or comma.即使以下情况也不起作用,尽管它看起来与第一个示例几乎相同:
func main() {
var mine MyStruct
// Check if mine is empty.
if empty := MyStruct{}; mine == empty {
fmt.Print("mine is empty")
}
}
Run Code Online (Sandbox Code Playgroud)
编译器说:syntax error: need trailing comma before newline in composite literal.我找到了以下代码,但是:
func main() {
var mine MyStruct
// Check if mine is empty.
if mine == *new(MyStruct) {
fmt.Print("mine is empty")
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么编译器不接受上面两个例子吗?虽然我们正在研究:检查"空"结构的惯用方法是什么?最后一个例子有效,但对我来说看起来有点奇怪.
pet*_*rSO 13
{}用括号解决歧义.例如,
package main
import "fmt"
type MyStruct struct {
field1 string
field2 int
}
func main() {
var mine MyStruct
// Check if mine is empty.
if mine == (MyStruct{}) {
fmt.Print("mine is empty")
}
}
Run Code Online (Sandbox Code Playgroud)
当使用LiteralType的TypeName形式的复合文字作为关键字与"if","for"或"switch"语句块的左括号之间的操作数出现时,会出现解析歧义,并且复合文字是未括在括号,方括号或花括号中.在这种罕见的情况下,文字的左括号被错误地解析为引入语句块的那个.要解决歧义,复合文字必须出现在括号内.
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |