有没有办法检查变量中是否存在自定义结构体?不幸的是,在nil检查时,我得到消息"mismatched types models.Memberz and untyped nil"
?
我现在已经把它改成了一个额外的变量,并改变了那里的类型,这似乎起作用了。
这段代码使用了一个额外的变量,工作正常,但发现有点麻烦。
func Session(c *gin.Context) {
session := sessions.Default(c)
v := session.Get("secure")
if v == nil {
var data = models.Memberz{
Name: "test",
Age: 0,
Loggedin: true,
}
session.Set("secure", data)
session.Save()
} else {
member := v.(models.Memberz)
fmt.Println("data: " + member.Name)
}
c.JSON(200, gin.H{
"status": "success",
})
}
实际上我希望下面的代码可以工作,但是它给出了一个错误。在Golang中有没有其他的选项可以让我检查这个?
func Session(c *gin.Context) {
session := sessions.Default(c)
v := session.Get("secure").(models.Memberz)
if v == nil {
var data = models.Memberz{
Name: "test",
Age: 0,
Loggedin: true,
}
session.Set("secure", data)
session.Save()
} else {
fmt.Println("data: " + v.Name)
}
c.JSON(200, gin.H{
"status": "success",
})
}
1条答案
按热度按时间5tmbdcev1#
使用可用于类型Assert的 special“coma ok”赋值形式。
注意:当进行类型Assert时,除非你100%确定你知道存储在接口中的类型是正确的,否则你应该总是使用“逗号ok”形式的赋值,因为如果你不使用“逗号ok”并且你不确定类型,那么你的程序迟早会崩溃。使用正常形式的赋值的不正确的类型Assert会导致运行时死机。
你也可以在if语句中做类型Assert,使代码更紧凑,但要记住,变量的作用域是if块和它的else块,在外部是不可访问的。