You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编译go-sqlite3启用JSON1模块解决json_extract未定义错误

解决go-sqlite3启用JSON1模块编译失败的问题

你遇到的问题是因为go-sqlite3默认编译时没有启用JSON1扩展,而且之前用的编译参数格式不对——go-sqlite3是通过build tags来启用这类扩展的,不是-flags参数。下面是正确的解决步骤:

你的示例代码

这是你调用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 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

正确的编译步骤

1. 清理本地缓存(避免旧版本干扰)

先清理Go的模块缓存和构建缓存,确保后续编译用的是最新配置:

go clean -cache -modcache

2. 安装启用JSON1的go-sqlite3驱动

使用-tags参数指定启用sqlite_json1扩展,执行安装命令:

go install -tags sqlite_json1 github.com/mattn/go-sqlite3

3. 构建你的项目时带上同样的tag

编译你自己的项目代码时,也需要加上-tags sqlite_json1,这样Go会链接启用了JSON1的sqlite3库:

go build -tags sqlite_json1 ./your-main-package-path

验证效果

完成上述步骤后,重新运行你的程序,json_extract函数就能正常执行,不会再出现undefined function的错误了。

内容的提问来源于stack exchange,提问作者riccardo_92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:13:27