Какой тип данных выбрать для хранения цены с копейками в качестве ключа

«Какой тип данных выбрать для хранения цены с копейками в качестве ключа» — вопрос из категории Базы данных, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для хранения цены с копейками в качестве ключа лучше использовать int (например, в копейках) или decimal.Decimal (из пакета github.com/shopspring/decimal).

Почему не float64?
Из-за проблем с точностью при операциях с плавающей точкой (например, 0.1 + 0.2 != 0.3).

Пример с int:

priceInKopecks := 10050 // 100 рублей 50 копеек

Пример с decimal:

import "github.com/shopspring/decimal"

price := decimal.NewFromFloat(100.50)

Для ключей в map:
Лучше использовать int (копейки) или строковое представление (string), так как decimal.Decimal не является comparable типом для ключей.

prices := map[int]string{
    10050: "Сто рублей 50 копеек",
}