On Tue, Oct 31, 2017 at 04:36:20PM +0800, hui zhang wrote: [...] > > > Is there a way or lib to read a binary into a this structure in one line > > > code? > > > > > > how about more complicate struct ? > > > type complicatestrt struct { > > > len int32 > > > strData []variastrt > > > } [...] > > - Write some complicated code which uses reflection -- just like > > the stock encoding/binary does -- to understand how to interpret the > > fields of any custom struct type based on that type's tags (or just > > "shape" -- that is, the types and relative order of its fields). > > > > For the latter, take into account that while there's no mention of the > > format of the field tag in the language spec, the convention for their > > format is documented at [4]: > > > > | By convention, tag strings are a concatenation of optionally > > | space-separated key:"value" pairs. Each key is a non-empty string > > | consisting of non-control characters other than space (U+0020 ' '), > > | quote (U+0022 '"'), and colon (U+003A ':'). Each value is quoted using > > | U+0022 '"' characters and Go string literal syntax. > > > > Hence you could come up with something like: > > > > type variastrt struct { > > len int32 `var:"value:data endian:big"` > > data []int32 `var:"endian:little"` > > } > > > > And then you'd reflect over the type the user supplied to your > > unmarshaling code, and in that reflection code you'd parse the field's > > tag, get the value associated with the "var" key and parse that, in > > turn, to know the name of the field to unmarshal the value into, and the > > endianness of the elements of that value (if applicable). [...] > > 4. https://golang.org/pkg/reflect/#StructTag
> Thank you very much > I know something like below could do. The problem has some one did it ? I > don't know how to use the tag string. > type variastrt struct { > len int32 `var:"value:data endian:big"` > data []int32 `var:"endian:little"` > } I'm not sure what you're asking about. As I have said, if you would like to implement the indicated approach, you would need to write code which obtains tags defined on the fields of a user-programmed type, parses them and acts based on the results. I have shown you what is the codified policy on the format of the struct field tags (they are not defined by the Go language specification but everyone agrees upon that policy which I cited in my first reply to this thread). To inspect at runtime the type of a user-supplied variable, and then further inspect its properties — such as fields of a struct type, you need to use the standard package "reflect". If you want to learn how to reflect over any custom user-defined type using the standard package "reflect" and deal with the tags defined on the fields of such a type, I'd suggest looking at the standard package encoding/json and encoding/xml which make heavy use of these tags. -- 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.