mysql - mysql 的 gorm : record not found

标签 mysql go go-gorm

 // 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 的值)。

查看更详细的解释herehere

您可以通过为该字段添加明确的 gorm 映射来解决此问题(确切格式请参阅 gorm 文档)。但我宁愿建议改用 github.com/shopspring/decimal,这样您就可以始终知道您正在使用的准确精度。将这些字段显式映射为数字仍然是一个好主意。

关于mysql - mysql 的 gorm : record not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43020899/

相关文章:

php - 查询从php中的三个表中读取

go - 分配 int 指针值的简单方法?

go - 如何调用外部程序并处理其输出?

postgresql - 使用 GORM 和 Postgresql 如何设置搜索路径?

mysql - 如果存在特定 id,则将 json 值提取到列中

php - 根据年、月和我的自定义编号在 mysql 中创建一个 ID 列

Mysql2::错误:不正确的字符串值:'\xE2\x80\xA8\x09

go - 如何使用 md5 生成随机 token

go - 在选择中使用子查询

postgresql - 使用 Gorm 插入和选择 PostGIS 几何