// Int promises that the zero value is a 0, but in gmp // the zero value is a crash. To bridge the gap, the // init bool says whether this is a valid gmp value. // doinit initializes z.i if it needs it. This is not inherent // to FFI, just a mismatch between Go's convention of // making zero values useful and gmp's decision not to. func (q *Rat) doinit() { if q.init { return } q.init = true C.mpq_init(&q.i[0]) }
// Rat promises that the zero value is a 0, but in gmp // the zero value is a crash. To bridge the gap, the // init bool says whether this is a valid gmp value. // doinit initializes z.i if it needs it. func (z *Rat) doinit() { if z.init { return } z.init = true C.mpq_init(&z.i[0]) runtime.SetFinalizer(z, ratFinalize) }