发现个 pure go 的 sqlite 驱动

2021-08-18 14:11:29 +08:00
 iyear

源于 tg 群群友的推荐

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

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

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

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

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

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

https://johng.cn/cgo-enabled-affect-go-static-compile/
danc
2021-08-18 15:20:54 +08:00
上面有口误,是“c 到 go”的编译器
caotian
2021-08-18 15:43:25 +08:00
挺好, 之前有个项目用到 sqlite, mac 上不能运行, 不能编译, 没办法把源码拷到服务器上编译
dosgo
2021-08-18 16:03:03 +08:00
貌似 https://pkg.go.dev/modernc.org/sqlite 是用 exec 执行实现的?
qieqie
2021-08-18 18:07:52 +08:00
这个作者挺厉害的,不过他很多项目实验性比较强,我是不敢用
qieqie
2021-08-18 18:21:38 +08:00
你们抱怨的 cgo 问题,换了 c/c++一样会遇到,和 cgo 就没啥关系,
而且你以为你静态链接了所有依赖,其实没有,不信可以试试`gethostbyname`
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
2021-08-19 20:16:29 +08:00
@kekeabab #16 我发的这个?这个纯 go 搞的交叉编译当然舒服
kekeabab
2021-08-19 20:41:39 +08:00
@iyear 当然不是你发这个
iyear
2021-08-19 22:18:00 +08:00
@kekeabab #18 https://github.com/mattn/go-sqlite3 这个?这个交叉编译可以这么方便的吗。。我孤陋寡闻了
kekeabab
2021-08-20 14:09:24 +08:00
@iyear #19 https://github.com/mattn/go-sqlite3 就是这个,用这个了蛮久了,如果不用一些扩展的话,交叉编译很方便,下载完对应的 gcc 就能用了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/796538

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX