3 ms·
It's pretty easy to statically link SQLite[0]. Are there other disadvantages to CGO? [0]: https://www.arp242.net/static-go.html https://www.arp242.net/static-g
by anderspitman 5y ago
It's pretty easy to statically link SQLite[0]. Are there other disadvantages to CGO?
[0]: https://www.arp242.net/static-go.html https://www.arp242.net/static-go.html
- christophilus 5y agoYes. It doesn’t play nice with goroutines and Go’s concurrency model, from what I understand.
- eloff 5y agoYes, function calls across the boundary are slow. It's fine if the functions do lots of work, it's very expensive for function calls that should be cheap. For sqlite it might not matter too much, since any query does quite a bit of work.
- throwaway894345 5y agoAgreed. I wouldn't be surprised if a pure-Go alternative would be slower. Someone remarked upthread that the same author wrote a C-to-Go transpiler specifically to make a pure-Go sqlite and it was (somewhat unsurprisingly) considerably slower than the CGo version. It's possible (and to an extent, likely) that the transpolar was generating suboptimal Go code, but I would wager that a hand-written version would also be slower.
- azinman2 5y agoA query may do a lot of work but iterating over many results could be very slow.
- eloff 5y agoYes, the API is probably suboptimal for Go. It's better to make a wrapper that does the query and fetches many results in one call, into a Go buffer.
- vbitz 5y agoWithout additional configuration cgo breaks cross-compilation.
- anderspitman 5y agoOh right how could I forget that.