@helixly

Как правильно перобразовать типы в int полученные из JSON?

Звучит вроде бы не сложно, но в GO все числа полученные из json.Unmarshal имеют тип float64.

Что если мне нужно получать int и написать для этого какой-то хелпер. Чтобы прямо из "метода" получать значение присланных данных в запросе в нужном формате?

Лезу в документацию encode/json, нахожу метод декодера UseNumber(), который преобразует все числа вместо float64 в тип json.Number, который в свою очередь имеет несколько методов для преобразования в другие типы, но типы опять не те которые нужны, только int64, Float64, string

func (c *Controller) GetInt(name string) (i int) {
	if val, status := c.Params[name]; status {
		switch val.(type) {
		case json.Number:
			i64, _ := val.(json.Number).Int64()
			i = int(i64)
		}
	}
	return
}


Получается вот такой код, пришлось добавить конструкцию switch чтобы исключить панику если вдруг прилетит строка в json вместо числа. Функция работает, но как то сложновато, нет? Есть мысли как упростить?
  • Вопрос задан
  • 446 просмотров
Пригласить эксперта
Ответы на вопрос 1
evnuh
@evnuh
Поиск Гугл помог мне, впусти и ты его в свой дом
var s struct {
	I int
}
json.Unmarshal([]byte(`{"I": 5}`), &s)
fmt.Println(s.I) // 5

работает прекрасно.

Ещё вы можете int64 привести к int с помощью int()
var i64 int64 = 5
var i int = int(i64)
fmt.Println(i)	// 5
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы