On Sun, Sep 18, 2016 at 11:10 PM, <dem...@gmail.com> wrote: > Is there any update to alignment/padding for structs now that we can write > .so files that can be called by C programs? We would have to know it to tell > the C compiler what to expect from go side imho.
When you use //export with cmd/cgo you will get a header file that your C code can #include. See https://golang.org/cmd/cgo/#hdr-C_references_to_Go . Ian > On Thursday, April 5, 2012 at 9:10:48 PM UTC-7, Kyle Lemons wrote: >> >> On Thu, Apr 5, 2012 at 7:11 AM, LRN <lrn...@gmail.com> wrote: >>> >>> Related question: >>> If alignment and padding is platform dependent, how do you write and read >>> structs to/from a socket? >> >> >> The solution is to not write platform dependent code. The related topic >> of byte ordering and platform independence is covered in this blog post. >> The gob package (incidentally, if I'm not mistaken, also written by the >> author of that blog post), is a performant binary encoding scheme that will >> work from and to any platform that supports go. >> >>> >>> For example, in C it is not uncommon to declare a struct, initialize its >>> fields with values (converted to big-endian format), then write it into a >>> socket in one call. >>> The receiver will, again, read the struct from a socket in one call, then >>> will do big-endian-to-native format conversion on each field where it is >>> applicable - and will get the same struct the sender had. >>> This only works when definitions of the struct on both the sender and the >>> receiver are aligned in the same way (usually - 1-byte aligned). >>> >>> I've encountered this problem recently, which is why i'm asking. >>> >>> Also, MSVC uses a padding algorithm different from the one gcc has, which >>> is why there's a -mms-bitfields option in gcc. It forces gcc to use >>> MSVC-style padding, which is required if the caller wants to pass certain >>> structs to W32 API. >>> How will that work in Go? (h-m-m-m...i can probably infer that from W32 >>> port of Go by reading its source code...) >> >> > -- > 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.