You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GORM更新数组字段?解决类型不匹配报错问题

解决GORM更新BigQuery数组字段的类型不匹配错误

错误原因

触发的Value of type STRUCT<INT64, INT64> cannot be assigned to pets错误,本质是GORM处理[]string类型时,未正确映射到BigQuery的ARRAY<STRING>类型,反而错误将其转换为结构体类型,导致数据库类型不匹配。

解决方案

1. 直接执行原生SQL更新

绕开ORM的自动转换逻辑,通过Exec方法执行原生BigQuery SQL,确保数组参数被正确传递:

bqStore.DB.Exec("UPDATE `project-id.dataset-id.people` SET pets = ? WHERE id = ?", pets, 1)

2. 升级GORM BigQuery驱动

该问题可能是旧版本驱动的类型映射bug,升级到最新版本修复问题:

go get gorm.io/driver/bigquery@latest

3. 用结构体/Map包装更新数据

通过Updates方法传递Map或临时结构体,让GORM更准确识别字段类型:

  • 使用Map:
bqStore.DB.Model(&Person{}).Where("id = ?", 1).Updates(map[string]interface{}{"pets": pets})
  • 使用临时结构体:
updatePayload := struct {
    Pets []string `gorm:"column:pets"`
}{Pets: pets}
bqStore.DB.Model(&Person{}).Where("id = ?", 1).Updates(updatePayload)

内容的提问来源于stack exchange,提问作者Deqing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:37:15