JSON1 поддерживает go-sqlite3 с использованием gorm
В следующем примере я использую json_extract(...)
используя go-sqlite3
водитель в Голанге.
package main
import (
_ "github.com/mattn/go-sqlite3"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"fmt"
"encoding/json"
"net/http"
)
func main() {
var db *gorm.DB
type Session struct {
gorm.Model
SessionID string `json:"session_id"`
Options string `json:"options"`
}
db, err := gorm.Open("sqlite3", "./app.db")
if err != nil {
fmt.Println(err)
}
defer db.Close()
db.AutoMigrate(&Session{})
var m map[string]int
m = make(map[string]int)
m["a"] = 1
m["b"] = 2
m["c"] = 3
js, err := json.Marshal(m)
sess := Session{
SessionID: "test",
Options: string(js),
}
db.Create(&sess)
db.Save(&sess)
var b = &Session{}
type Result struct {
Options string
}
// JSON test
var res Result
db.Raw("SELECT json_extract(options, '$.a') as Options from sessions").Scan(&res)
fmt.Println(sess.ID)
fmt.Println(res)
}
Проблема в том, что я не могу активировать модуль JSON1 при восстановлении go-sqlite3
Водитель. Это будет ошибкаundefined function: json_extract
на db.Raw(...)
линия.
В любом случае я знаю, что для поддержки JSON, github.com/mattn/go-sqlite3
должен быть скомпилирован с -flags "sqlite_json1"
. Я пробовал несколько вариантов:
go build -a -flags "sqlite_json1" github.com/mattn/go-sqlite3
go install -a -flags "sqlite_json1" github.com/mattn/go-sqlite3
go build -a --flags "sqlite_json1" github.com/mattn/go-sqlite3
go install -a --flags "sqlite_json1" github.com/mattn/go-sqlite3
и другие варианты flags
, Такие как sqlite_json
, json
, json1
и т. д. Ничто не избавит от ошибки неопределенной функции. Есть идеи, как правильно перестроитьgo-sqlite3
?
Очевидно, после этого я тоже перестраиваю свой собственный код.
Некоторая информация:
версия go: go version go1.13.1 linux/amd64
(платформа: Kubuntu 18.04)
версия go-sqlite3: github.com/mattn/go-sqlite3 текущий мастер
версия gorm: github.com/jinzhu/gorm текущий мастер
1 ответ
Согласно с go-sqlite3
's docs, любой из следующих флагов будет работать:
sqlite_json
sqlite_json1
json1
Вот содержание sqlite3_opt.json1.go
которые определяют теги, которые включают этот файл.
// Copyright (C) 2014 Yasuhiro Matsumoto <mattn.jp@gmail.com>.
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file.
// +build sqlite_json sqlite_json1 json1
package sqlite3
/*
#cgo CFLAGS: -DSQLITE_ENABLE_JSON1
*/
import "C"
Ссылка: https://github.com/mattn/go-sqlite3/blob/master/sqlite3_opt_json1.go
Также отметим, что вы используете --flags
в вашем go build
командовать, но дать --tags
вместо этого попробуйте.