// for trade_service
type AmountConfig struct {
MaxCny float64 `thrift:"max_cny,1" json:"max_cny"`
MaxBtc float64 `thrift:"max_btc,2" json:"max_btc"`
}
//
type AmountConfig struct {
gorm.Model
trade_service.AmountConfig //
}
func getAmountConfig() (amount_config *trade_service.AmountConfig, err error) {
db, err := getORMDB()
if err != nil {
logger.Errorln(err)
return
}
var amountConfig AmountConfig{}
if err = db.First(&amountConfig).Error; err != nil {
logger.Errorln("getAmountConfig amount record does not exist:", err)
return
}
amount_config = trade_service.NewAmountConfig()
amount_config.MaxCny = amountConfig.MaxCny
amount_config.MaxBtc = amountConfig.MaxBtc
logger.Infoln("get amountConfig ok", amount_config)
return
}
mysql表描述如下:
CREATE TABLE `amount_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`max_cny` decimal(65,2) DEFAULT NULL,
`max_btc` decimal(65,4) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `updated_at` (`updated_at`),
KEY `created_at` (`created_at`),
KEY `deleted_at` (`deleted_at`)
ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
我在表格“amount_config”中有一条记录,但在我运行代码“db.First(&amountConfig)”后显示错误“找不到记录”。
我的代码有问题吗?
最佳答案
没有实际数据很难判断,但我认为这很可能与精度和舍入有关。您的数据类型是 double 并且很可能会作为 sql type double 发送到 mysql。它将被转换为数字以进行比较,但它的精度将在逗号后的 15-18 位左右,并且可能不会完全符合您在代码中指定的值(例如 0.1 可能会变成类似 0.10000000000005 的值)。
您可以通过为该字段添加明确的 gorm 映射来解决此问题(确切格式请参阅 gorm 文档)。但我宁愿建议改用 github.com/shopspring/decimal
,这样您就可以始终知道您正在使用的准确精度。将这些字段显式映射为数字仍然是一个好主意。
关于mysql - mysql 的 gorm : record not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43020899/