Pierre Curto's Go version is advertised as compatible with lz4 cli.
All versions compatible with lz4 cli are labelled "interoperable",
because they read and generate the same frame format :
I guess when you mention "original C implementation", you mean using directly LZ4_compress_default() ?
This function generates compressed blocks (a subdivision of a frame).
Block format predates frame format by a few years, hence it's more commonly used.
Your API seems to faithfully reproduces lz4.h API, with identical scope, which means it generates compressed blocks.
I believe it's fine, the scope just needs to be clear.
One important limitation of the block format is that it's just that, a compressed block.
One still needs to provide compressed/decompressed size information for decompression to proceed.
When everything is done inside the same program, it's not an issue : a few more variables are allocated, storing requested information.
So it's a good fit.
But for a file format, it's a more tricky topic.
In general, it translates into some additional metadata, shipped into the file alongside the compressed block.
And because everyone implements its metadata differently, these files are not "interoperable".
They only work with the implementation which generates them.
My understanding is that your binding is not meant to generate files.
It's expecting to compress and decompress blobs of bytes from the same program.
It's fine, it's just a question of selecting a scope, and clearly document it.