How do I convert a string to a structure?
The line looks like this: Name[data1] Name2[data1 data2 data3] Name3[data1 data2] ...
The data can be of type Int, String, or Float. In general, this is not important, you can write everything as string.
Data in brackets is separated by a space
The first thing that comes to mind is to split the line for example by "] " and then go through all the slices, breaking each element "[" and read out the data. Is there some way to do this more correctly?
CodePudding user response:
- You need to define a specific format for the serializing the data. A key part of that will be how to encode specific special characters, such as the
[
and]
. You generally do not want to do this. - If you want to use any string as a temporary textual representation of your data and the format doesn't matter, you can just use JSON and use
json.Marshal()
andjson.Unmarshal()
.
I'm not sure what you are trying to achieve (what's this struct data? what generated it? why are you trying to decode it into a struct?) but it seems that going through the fundamentals might be helpful:
- https://en.wikipedia.org/wiki/Serialization will tell you what that is
- https://betterprogramming.pub/serialization-and-deserialization-ba12fc3fbe23 is a very short guide that will give you the very basics (in JavaScript)
- I already mentioned
json.Marshal
andjson.Unmarshal
- reading their docs in the standard library will be helpful as well.
I'm sure you can google the more in-depth articles when you identify what you need to know for your specific purposes.
CodePudding user response:
If you're free to use any tool you like, a regular expression might make this fairly easy.
(?P<Name>\[^\[\]*)\[(?P<Values>\[^\]\]*)\]
That matches each of the named value sets.
and then you could split the Values
group at the spaces with string.Split
To create a dynamic struct you'd need to use reflection. Avoid reflection, though, as you learn Go. A struct
in Go is unlike an object in say Javascript or Python, where fields are dynamic at runtime. Go struct
s are meant to have static fields.
For this purpose, a map[string][]string
would be a more appropriate type. The key would be the Name
fields, and the value would be the data
fields.