2016-08-25 2 views
2

У меня есть значение interface{} типа, полученный от *gin.Context:Ошибка преобразования интерфейса {} в целое гоу-джин

c.MustGet("account") 

Когда я пытаюсь преобразовать это в int с помощью:

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

я получаю ошибка:

interface conversion: interface is float64, not int 

Значение этого интерфейса - 1. Почему я получаю эту ошибку? Я использую это значение в запросе sql. Я не могу преобразовать это значение в float64, поскольку сбой SQL-запроса. Как я могу преобразовать это в int?

+0

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

ответ

2

Ошибка довольно понятна: динамическое значение, хранящееся в значении interface{}, имеет тип float64, который отличается от int.

Извлечение значения типа float64 (с использованием type assertion, как вы делали), и выполнить преобразование с помощью простого 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