2016-08-25 92 views
2

我从*gin.Context收到interface{}类型值:错误转换接口{}为int去,杜松子酒

c.MustGet("account") 

当我尝试转换到这个int使用:

c.MustGet("account").(int) 

我得到一个错误:

interface conversion: interface is float64, not int 

此接口的值是1。为什么我收到此错误?我在sql查询中使用这个值。由于sql语句失败,我无法将其转换为float64。我怎样才能将它转换成int

+0

http://stackoverflow.com/questions/8022389/convert-a-float64-to-an-int-in-go?rq=1 – kingSlayer

回答

2

错误是不言自明的:存储在interface{}值中的动态值类型为float64,它与int类型不同。 (使用type assertion像你一样)

提取float64类型的值,并且使用简单的type conversion做转换:

f := c.MustGet("account").(float64) 
i := int(f) 
// i is of type int, you may use it so 

或者在同一行:

i := int(c.MustGet("account").(float64)) 

要验证的类型和值:

fmt.Printf("%T %v\n", i, i) 

在这两种情况下输出(尝试它的Go Playground):

int 1 
相关问题