This Go package provides a "native" ogg vorbis decoder, but still requires cgo, as it uses inline code from stb_vorbis. Someday, it won't.
The package exports a single function:
var data byte … samples, nchannels, sampleRate, err := vorbis.Decode(data)
This corresponds to
stb_vorbis_decode_memory(), but is a little different. Samples is a
int16, corresponding to stb's dynamic array of shorts if you're on the right platforms. The samples seem to be stored native-endian, but I haven't tested many vorbis files. Nchannels is the number of channels, which are interleaved in the samples slice. Err is non-nil if the data is not an ogg vorbis stream according to stb.