我正在尝试从参考中获取地图,并且断言似乎失败了:session.AddFlash(gin.H{ "username": username, "password": password,}, "_post")...flashes := session.Flashes("_post")if flashes != nil { flash = flashes[0] fmt.Printf("%T\n", flash) if post_data, ok := flash.(gin.H); ok { fmt.Println("post_data:", post_data) data = post_data } else { fmt.Println("post_data(failed):", post_data) }}但是我总是得到以下输出,断言失败:*gin.Hpost_data(failed): map[]我认为这是由于我正在做的断言,所以我尝试过:if post_data, ok := (*flash).(gin.H); ok {但后来我得到 invalid indirect of flash (type interface {})我也试过:if post_data, ok := *flash.(gin.H); ok {但这给了我 invalid indirect of flash.(gin.H) (type gin.H)
2 回答
慕运维8079593
TA贡献1876条经验 获得超5个赞
类型断言要求您要断言的类型与断言部分的类型完全相同。
从您的代码中,flash是一个类型interface{},而基础类型是*gin.H(由 打印fmt.Printf("%T", flash))。因此断言应该是flash.(*gin.H)
下面是一些关于使用类型断言的例子:
package main
import r "reflect"
type A struct {
Name string
}
func main() {
// No pointer
aa := A{"name"}
var ii interface{} = aa
bb := ii.(A)
// main.A
// Pointer
a := &A{"name"}
var i interface{} = a
b := *i.(*A)
// main.A
c := i.(*A)
// *main.A
d := r.Indirect(r.ValueOf(i)).Interface().(A)
// main.A
}
}
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报
0/150
提交
取消