Demo

$ cloc vorbis/
---------------------------------------------------------

Language       files        blank      comment       code

---------------------------------------------------------

C/C++ Header       6          192          497        578

---------------------------------------------------------

$
cgogen vorbis.yml
processing vorbis.yml...
done in 304.657793ms
$
cloc vorbis/
---------------------------------------------------------

Language       files        blank      comment       code

---------------------------------------------------------

Go                 5          315          288       1780

C/C++ Header       6          192          497        578

---------------------------------------------------------

$

Fill the generator preferences

Start by creating an YAML manifest file like vorbis.yml for the C library you want to use: this includes specifying the resulting package name, description, license and options respected by cgo.

Read more about generator preferences in generator config section docs.

Add the parser preferences

Add a section specifying C header parsing parameters, usually you won’t need too much here, just write down the list of import paths and the list of header files, all the includes will be resolved automatically.

Read more about parser preferences in parser config section docs.

Add the translator preferences.. at last

This is the section where all the magic happens. In short, here go all the name translation options, type hints for structs and functions, matching rules based on regular expressions. Despite looking simple for small libraries, this section assembles a powerful binding engine for large projects like CMU PocketSphinx or Vulkan Graphics API.

Read more about translator preferences in translator config section docs.

Done! 🎉

$ cgogen vorbis.yml

We just automatically created vorbis package with cross-referenced GoDoc. See how it’s being used in a high-level Ogg/Vorbis decoder package for Go and check out a demo vorbis-player. Neat, isn’t it?

Source Code and Documentation