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.