gpt4 book ai didi

go - JSON1 支持 go-sqlite3 使用 gorm

转载 作者:行者123 更新时间:2023-12-01 22:28:29 25 4
gpt4 key购买 nike

在以下示例中,我使用 json_extract(...)使用 go-sqlite3 Golang的司机。

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_extractdb.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 当前大师

最佳答案

根据 go-sqlite3的文档,以下任何标志都将起作用:

  • 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试试吧。

    关于go - JSON1 支持 go-sqlite3 使用 gorm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58303609/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com