发现个 pure go 的 sqlite 驱动 - V2EX
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
iyear

发现个 pure go 的 sqlite 驱动

  •  
  •   iyear
    iyear Aug 18, 2021 5253 views
    This topic created in 1738 days ago, the information mentioned may be changed or developed.

    源于 tg 群群友的推荐

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

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

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

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

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

    最后加上 -linkmode "external" -extldflags "-static" 的 ldflag 参数才搞定。
    keepeye
        7
    keepeye  
       Aug 18, 2021
    希望能发展壮大 讨厌 cgo
    danc
        8
    danc  
       Aug 18, 2021
    大佬可以试试这个,我前几天试了下这个,但没有详细测试。这个库的大佬挺厉害,搞了一个 gcc 到 go 的编译器,然后把 sqlite 的 c 源码,编译成了 go 。
    danc
        9
    danc  
       Aug 18, 2021
    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  
       Aug 18, 2021   1
    附一下如何在开启 CGO_ENABLE 的条件下,让编译产物静态链接的文章:

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

    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
       Aug 19, 2021
    @kekeabab #16 我发的这个?这个纯 go 搞的交叉编译当然舒服
    kekeabab
        18
    kekeabab  
       Aug 19, 2021
    @iyear 当然不是你发这个
    iyear
        19
    iyear  
    OP
       Aug 19, 2021
    @kekeabab #18 https://github.com/mattn/go-sqlite3 这个?这个交叉编译可以这么方便的吗。。我孤陋寡闻了
    kekeabab
        20
    kekeabab  
       Aug 20, 2021
    @iyear #19 https://github.com/mattn/go-sqlite3 就是这个,用这个了蛮久了,如果不用一些扩展的话,交叉编译很方便,下载完对应的 gcc 就能用了。
    RTSmile
        21
    RTSmile  
       Aug 22, 2021
    @kekeabab 这个很奇怪,我这里用静态编译指令过后,在 Centos7 上面跑一段时间会莫名其妙报空指针错误然后挂掉,不静态就不出问题,不太了解是什么原因。
    EsSkOyN
        22
    EsSkOyN  
       Jul 29, 2022
    笑嘻了 cloudquery archive 了
    iyear
        23
    iyear  
    OP
       Jul 29, 2022
    @EsSkOyN #22 没太懂笑点在哪。fork 更新一下版本继续用呗 https://github.com/iyear/sqlite
    About     Help     Advertise     Blog     API     FAQ     Solana     3057 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 02:54 PVG 10:54 LAX 19:54 JFK 22:54
    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