Hmmm... backend constructors are C functions that need git_odb_backend **out, and will be different from one client to the next. I can only think of two ways to achieve this...

Sharing the pointer (whether through public variable or a getter), e.g.:
```go
/* GIT2GO */
type OdbBackend struct {
	Ptr *C.git_odb_backend
}

/* CLIENT */
// ...

cpath := C.CString(kyotoPath)
defer C.free(unsafe.Pointer(cpath))

// handoff to c, convert C.int to int for error check
ret := C.git_odb_backend_kyoto(&backend.Ptr, cpath)
if ret < 0 {
	err = git.LastError()
}

// ...
```

Or passing an abstract function, e.g.:
```go
/* GIT2GO */
type OdbBackend struct {
	ptr *C.git_odb_backend
}
type BackendConstructor func(**C.git_odb_backend) int

func (v *Odb) AddBackend(constructor BackendConstructor , priority int) (err error) {
	// ...
}

/* CLIENT */
// ...

constructorFunc := func(backend **C.git_odb_backend) (ret int) {
	cpath := C.CString(kyotoPath)
	defer C.free(unsafe.Pointer(cpath))

	// handoff to c, convert C.int to int for error check
	cret := C.git_odb_backend_kyoto(backend, cpath)
	ret = int(cret)
}
odb.AddBackend(constructorFunc, 1)

// ...
```

I considered writing an interface too, but I could not see how to avoid sharing the pointer as in example 1.

If neither of the above are satisfactory, do you have any advice/resources you could recommend before I push the next commit?