type Handle … // NewHandle returns a handle for a given value. // // The handle is valid until the program calls Delete on it. The handle // uses resources, and this package assumes that C code may hold on to // the handle, so a program must explicitly call Delete when the handle // is no longer needed. // // The intended use is to pass the returned handle to C code, which // passes it back to Go, which calls Value. func NewHandle(v any) Handle { … } // Value returns the associated Go value for a valid handle. // // The method panics if the handle is invalid. func (h Handle) Value() any { … } // Delete invalidates a handle. This method should only be called once // the program no longer needs to pass the handle to C and the C code // no longer has a copy of the handle value. // // The method panics if the handle is invalid. func (h Handle) Delete() { … } var handles … var handleIdx …