This begs the question how syscalls are handled. I assume they don't use
cgo, but often they require to pass a pointer to some memory which is
documented as a C-struct. Is there any guidance on that (or any problems
that might arise there)?

On Tue, Apr 11, 2017 at 6:41 PM, Ian Lance Taylor <i...@golang.org> wrote:

> On Tue, Apr 11, 2017 at 2:25 AM, hui zhang <fastfad...@gmail.com> wrote:
> >
> > If I define the same  2 struct in c and go
> > can they be  passed directly with unsafe.Pointer
>
> The struct layout rules are under-defined in Go.  The current rules
> are straightforward, and it is the case that most structs with the
> same sequence of field types will look the same in C and Go.  Of
> course you must remember that `int` in Go is often not the same size
> as `int` in C.  Also the alignment rules are not always the same, so
> don't permit any alignment padding.  And this may change in future Go
> releases.
>
> > and how to export go struct from go to c ?
>
> You can't, not easily.  But it's easy to use cgo to export a C struct
> from C to Go, and doing that avoids all the concerns about types and
> alignments, so you should do that if at all possible.
>
>
> > /*
> > #include <stdio.h>
> >
> > typedef struct {
> >     int a;
> >     int b;
> > } Foo;
> >
> > void pass_struct(Foo *in) { printf("%d : %d\n", in->a, in->b); }
> >
> > */
> >
> > import "C"
> >
> > import (
> >     "fmt"
> >     "unsafe"
> > )
> >
> > type Foo struct{ a, b int32 }
> >
> > C.pass_struct((*C.Foo)(unsafe.Pointer(&foo)))
>
> For example, how about `type Foo C.Foo`?
>
> 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.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to