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.

Reply via email to