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 · 4242 次点击
    这是一个创建于 1197 天前的主题,其中的信息可能已经有所发展或是发生改变。

    源于 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   ·   实用小工具   ·   1011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:00 · PVG 05:00 · LAX 13:00 · JFK 16:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.