登录
首页 >  Golang >  Go问答

JSON1 使用 gorm 支持 go-sqlite3

来源:stackoverflow

时间:2024-04-07 19:27:33 412浏览 收藏

golang学习网今天将给大家带来《JSON1 使用 gorm 支持 go-sqlite3》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希望大家都能给我建议评论哈~希望能帮助到大家!

问题内容

在下面的示例中,我使用 golang 中的 go-sqlite3 驱动程序来使用 json_extract(...)

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 模块。它将在 db.raw(...) 行上出现错误 undefined function: json_extract

无论如何,我知道为了支持 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_jsonjsonjson1等。没有什么可以消除未定义的函数错误。有什么想法如何正确重建 go-sqlite3 吗?

显然,在那之后我也重建了自己的代码。

一些信息:

go版本:go版本go1.13.1 linux/amd64(平台:kubuntu 18.04)

go-sqlite3版本:github.com/mattn/go-sqlite3当前master

gorm版本:github.com/jinzhu/gorm 当前master


解决方案


根据 go-sqlite3 的文档,以下任何标志都可以使用:

  • sqlite_json
  • sqlite_json1
  • json1

以下是 sqlite3_opt.json1.go 的内容,它定义了包含此文件的标签。

// Copyright (C) 2014 Yasuhiro Matsumoto <[email protected]>.
//
// 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

还要指出,您在 go build 命令中使用了 --flags,但请尝试一下 --tags

本篇关于《JSON1 使用 gorm 支持 go-sqlite3》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>