发现个 pure go 的 sqlite 驱动 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
iyear
V2EX    Go 编程语言

发现个 pure go 的 sqlite 驱动

  •  
  •   iyear
    iyear 2021-08-18 14:11:29 +08:00 4939 次点击
    这是一个创建于 1585 天前的主题,其中的信息可能已经有所发展或是发生改变。

    源于 tg 群群友的推荐

    文档: https://pkg.go.dev/modernc.org/sqlite 而且还有相应的 gorm 的驱动:https://github.com/cloudquery/sqlite

    这样似乎用不到 cgo 了,而且 goreleaser 什么的好像都能跑

    有没有人用过这个库,性能什么的差别大吗?如果不错的话感觉挺香的

    23 条回复    2022-07-29 15:30:04 +08:00
    Smash
        1
    Smash  
       2021-08-18 14:38:00 +08:00 via Android   1
    cgo 对于交叉编译一点都不友好
    meshell
        2
    meshell  
       2021-08-18 14:48:59 +08:00   1
    1 楼+
    iyear
        3
    iyear  
    OP
       2021-08-18 14:57:47 +08:00
    @Smash #1 深有感触,搞分发的时候人都麻了
    Smash
        4
    Smash  
       2021-08-18 15:04:34 +08:00 via Android
    @Smash 不仅如此,反而很多开发者引以为乐。觉得这样挺好的。
    gamexg
        5
    gamexg  
       2021-08-18 15:09:13 +08:00
    好东西
    Smash
        6
    Smash  
       2021-08-18 15:11:57 +08:00   3
    我有一个项目,用了 cgo 版本的 sqlite,CGO 是 ENABLE=1,在 docker 环境下的 alpine 上跑不起来。

    用 file 命令查看可执行文件,发现是动态链接,很多 alpine 的动态链接库不兼容,最后需要改为静态链接。

    最后加上 -linkmode "external" -extldflags "-static" 的 ldflag 参数才搞定。
    keepeye
        7
    keepeye  
       2021-08-18 15:12:22 +08:00
    希望能发展壮大 讨厌 cgo
    danc
        8
    danc  
       2021-08-18 15:17:27 +08:00
    大佬可以试试这个,我前几天试了下这个,但没有详细测试。这个库的大佬挺厉害,搞了一个 gcc 到 go 的编译器,然后把 sqlite 的 c 源码,编译成了 go 。
    danc
        9
    danc  
       2021-08-18 15:19:26 +08:00
    https://gitlab.com/cznic/ccgo/-/blob/master/v3/main.go

    ```
    //TODO parallel

    //TODO CPython
    //TODO Cython
    //TODO gmp
    //TODO gofrontend
    //TODO gsl
    //TODO gtk
    //TODO hdf5
    //TODO minigmp
    //TODO mpc
    //TODO mpfr
    //TODO pcre
    //TODO pcre2
    //TODO quickjs
    //TODO redis
    //TODO tcl/tk
    //TODO wolfssl
    //TODO zdat
    //TODO zlib
    ```
    Smash
        10
    Smash  
       2021-08-18 15:19:53 +08:00   1
    附一下如何在开启 CGO_ENABLE 的条件下,让编译产物静态链接的文章:

    https://johng.cn/cgo-enabled-affect-go-static-compile/
    danc
        11
    danc  
       2021-08-18 15:20:54 +08:00
    上面有口误,是“c 到 go”的编译器
    caotian
        12
    caotian  
       2021-08-18 15:43:25 +08:00
    挺好, 之前有个项目用到 sqlite, mac 上不能运行, 不能编译, 没办法把源码拷到服务器上编译
    dosgo
        13
    dosgo  
       2021-08-18 16:03:03 +08:00
    貌似 https://pkg.go.dev/modernc.org/sqlite 是用 exec 执行实现的?
    qieqie
        14
    qieqie  
       2021-08-18 18:07:52 +08:00
    这个作者挺厉害的,不过他很多项目实验性比较强,我是不敢用
    qieqie
        15
    qieqie  
       2021-08-18 18:21:38 +08:00
    你们抱怨的 cgo 问题,换了 c/c++一样会遇到,和 cgo 就没啥关系,
    而且你以为你静态链接了所有依赖,其实没有,不信可以试试`gethostbyname`
    kekeabab
        16
    kekeabab  
       2021-08-19 18:14:49 +08:00
    至少这个库,我觉得交叉编译很友好呀

    GOOS=linux GOARCH=arm64 go build -x -trimpath -a -ldflags '-extldflags "-static -fpic -s -w"' .

    环境是
    archlinux 5.13.10-arch1-1 linux/amd64 x86_64
    go version go1.17
    iyear
        17
    iyear  
    OP
       2021-08-19 20:16:29 +08:00
    @kekeabab #16 我发的这个?这个纯 go 搞的交叉编译当然舒服
    kekeabab
        18
    kekeabab  
       2021-08-19 20:41:39 +08:00
    @iyear 当然不是你发这个
    iyear
        19
    iyear  
    OP
       2021-08-19 22:18:00 +08:00
    @kekeabab #18 https://github.com/mattn/go-sqlite3 这个?这个交叉编译可以这么方便的吗。。我孤陋寡闻了
    kekeabab
        20
    kekeabab  
       2021-08-20 14:09:24 +08:00
    @iyear #19 https://github.com/mattn/go-sqlite3 就是这个,用这个了蛮久了,如果不用一些扩展的话,交叉编译很方便,下载完对应的 gcc 就能用了。
    RTSmile
        21
    RTSmile  
       2021-08-22 14:22:33 +08:00
    @kekeabab 这个很奇怪,我这里用静态编译指令过后,在 Centos7 上面跑一段时间会莫名其妙报空指针错误然后挂掉,不静态就不出问题,不太了解是什么原因。
    EsSkOyN
        22
    EsSkOyN  
       2022-07-29 09:47:53 +08:00
    笑嘻了 cloudquery archive 了
    iyear
        23
    iyear  
    OP
       2022-07-29 15:30:04 +08:00
    @EsSkOyN #22 没太懂笑点在哪。fork 更新一下版本继续用呗 https://github.com/iyear/sqlite
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     821 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:40 PVG 06:40 LAX 14:40 JFK 17:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86