使用go-grom支持mysql的JSON

时间:2017-07-19 10:48:10

标签: mysql go go-gorm

我试图使用MySQL 5.7.8中引入的原生JSON支持

以下是我试用的快速示例应用。

DB Schema

CREATE TABLE IF NOT EXISTS `experiment` (
 `id`              INT NOT NULL AUTO_INCREMENT,
 `name`            VARCHAR(255) NOT NULL DEFAULT '',
 `age`             INT(10) NOT NULL DEFAULT 10,
 `content`         JSON NOT NULL,
 PRIMARY KEY (`id`)
)ENGINE = InnoDB DEFAULT CHARSET=latin1;

GO代码

package main

import (
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/mysql"
  "encoding/json"
)

type Experiment struct {
 gorm.Model
 Name    string `json:"name"`
 Age     int64  `json:"age"`
 Content map[string]interface{} `json:"content"`
}

func main() {
   db, err := gorm.Open("mysql", "root:root@/testdb?charset=utf8&parseTime=True&loc=Local")
   if err != nil {
        panic("failed to connect database")
   }
  defer db.Close()
  j1 := []byte(`{"name":"anu", "age": 123, "content": { "k1" : "v1",  "k2" : [1,2,3]}}`)

    var ex Experiment
   json.Unmarshal(j1, &ex)
   // Create
  db.Create(&ex)
}

这里Experiment.Content值是不可预测的。出于这个原因,我必须使用通用地图。

但是,该程序会引发以下错误 (sql: converting Exec argument $6 type: unsupported type map[string]interface {}, a map)

go-gorm库是否支持此功能。什么是实现这个json内容的读写的最佳方法?

0 个答案:

没有答案