Как мне решить эту проблему типа, чтобы избежать получения 0 и вместо преобразования действительного значения в float64?
t, ok := i.(T)
Эта строка кода проверяет, является ли значение интерфейса я держу конкретный тип T. Если нет, то ok будет false и t будет нулевым значением типа T
price_response1, _ := response1["price"].(float64)
Здесь response1 ["price"] не содержит тип float64. Следовательно, price_response1 имеет нулевое значение типа float64, которое равно 0.
Чтобы напечатать базовый тип интерфейса {} в виде строки, вы можете использовать:
getType := fmt.Sprintf("%T", response1["price"])
fmt.Println(getType)
См. Приведенный ниже код, чтобы получить фактическое значение, преобразованное в float64, если базовый тип - int:
package main
import "fmt"
func convertToFloat64(resp interface{}) {
switch v := resp.(type) {
case int:
fmt.Println(float64(v), "==> price_response1")
case float64:
fmt.Println(v, "==> price_response")
default:
fmt.Println("unknown")
}
}
func main() {
response := make(map[string]interface{})
response["price"] = 2.1
convertToFloat64(response["price"])
response1 := make(map[string]interface{})
response1["price"] = 2
convertToFloat64(response1["price"])
}
Выходные данные:
2.1 ==> price_response
2 ==> price_response1