преобразование интерфейса: интерфейс {} является uint64, а не float32

avatar
Damir
7 апреля 2018 в 23:00
1341
1
1

В основном у меня есть map[interface{}]interface{} и внутри под ключом "x" значение 90 (я напечатал, чтобы подтвердить правильность данных), но когда я делаю

mymap["x"].(float32)

Я получаю сообщение об ошибке

interface conversion: interface {} is uint64, not float32

Проблема в том, что я ожидаю число с плавающей запятой (полученное из вывода другой программы). Я также пытался использовать float32 (mymap ["x"]), но безуспешно (также безуспешно пробовал примеры из Google с int64).

Я использую go версии go1.10.1 linux/amd64

Источник
mkopriva
7 апреля 2018 в 23:04
2

Вы можете использовать преобразование после утверждения типа: float32(mymap["x"].(uint64)) play.golang.org/p/fBGUf4EDOMD

Damir
7 апреля 2018 в 23:08
0

@mkopriva Но это вопрос, который я иногда получаю, например, 45,5, когда 45, а не 45,0. Я могу решить эту проблему с помощью отражения и явного преобразования, но я хотел избежать этого шага, если это возможно, чтобы избежать дополнительного вызова отражения как более медленной части.

mkopriva
7 апреля 2018 в 23:12
4

Переключатель типа решит вашу проблему? play.golang.org/p/Xe2qt634-D5

Michael Hampton
8 апреля 2018 в 02:32
2

Вероятно, вам следует решить эту проблему на том уровне, на котором вы заполняете карту. Но вы не упомянули как вы это делаете.

Peter
8 апреля 2018 в 10:14
0

Что сказал Майкл. Старайтесь не использовать пустой интерфейс, если вам важны типы.

Ответы (1)

avatar
Jing
24 июля 2020 в 03:41
0

это мой скрипт:

switch i := x.(type) {
case nil:
    printString("x is nil")                // type of i is type of x (interface{})
case int:
    printInt(i)                            // type of i is int
case float64:
    printFloat64(i)                        // type of i is float64
case func(int) float64:
    printFunction(i)                       // type of i is func(int) float64
case bool, string:
    printString("type is bool or string")  // type of i is type of x (interface{})
default:
    printString("don't know the type")     // type of i is type of x (interface{})
}