wow ... that just seems so obvious now. Thanks! On Friday, 14 February 2020 12:41:48 UTC+8, Ian Lance Taylor wrote: > > On Thu, Feb 13, 2020 at 8:42 AM Alex <alex...@gmail.com <javascript:>> > wrote: > > > > I have to pass C pointers between packages so I used uintptr like how > syscall does things. > > However go vet gives the message "possible misuse of unsafe.Pointer". > > > > Is there something I could do to avoid vet complaining? > > > > Package A: > > type Foo struct { > > procAddr uintptr > > } > > > > func (f Foo) ProcAddr() uintptr { > > return f.procAddr > > } > > > > func Bar() Foo { > > return Foo{C.SomeFunc()} > > } > > > > Package B: > > p := C.ASDF(unsafe.Pointer(A.Bar().ProcAddr())) // possible misuse of > unsafe.Pointer > > If the pointers involved are all C pointers--if they all point to > memory allocated in C--then use little wrapper functions in your cgo > comment to do the conversion to uintptr_t on the C side rather than on > the Go side. > > /* > static uintptr_t SomeFuncUintptr() { return (uintptr_t)(SomeFunc()); } > */ > import "C" > > Then the Go code will only ever see uintptr values, which is what you > want. > > To reiterate, this is only safe if the C code is only ever using > pointers to memory allocated in C. > > Ian >
-- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/b6825e29-bfbd-43d4-875c-0a3fa1cc6ff4%40googlegroups.com.