在以下示例中,我使用了Golang 中的驱动程序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)
}
问题是我无法在重建go-sqlite3
驱动程序时激活 JSON1 模块。就会出错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 version go1.13.1 linux/amd64
平台:Kubuntu 18.04)
go-sqlite3 版本:github.com/mattn/go-sqlite3 当前主
gorm 版本:github.com/jinzhu/gorm 当前大师