func NewProj(def string) (*Proj, error) { cdef := C.CString(def) defer C.free(unsafe.Pointer(cdef)) proj := &Proj{p: C.pj_init_plus(cdef)} if proj.p == nil { return nil, errors.New(projError()) } // Set finalizer so the garbace collector // can release the object properly runtime.SetFinalizer(proj, (*Proj).Close) return proj, nil }
func NewProj(definition string) (*Proj, error) { cs := C.CString(definition) defer C.free(unsafe.Pointer(cs)) proj := &Proj{opened: false} mu.Lock() defer mu.Unlock() proj.pj = C.pj_init_plus(cs) if proj.pj == nil { return proj, errors.New(C.GoString(C.get_err())) } proj.opened = true runtime.SetFinalizer(proj, (*Proj).Close) return proj, nil }