Is it possible to transform a string containing "key:value key2:value" in an actual Golang map?
Example:
package main
type Test struct{
options map[string]interface{}
}
func main() {
string := "key:value key2:key:value"
var test Test
/// Do something to parse string into test.Options
}
Thanks!
Yes, you can definitely parse that string into a map of the type you specify!
Take a look at the "strings" package, in particular strings.SplitN(...)
. Consider these examples and think about how you can combine them, along with iteration, to populate that map:
str := "key:value key2:key:value"
kvs := strings.SplitN(str, " ", -1)
// []string{
// "key:value",
// "key2:key:value",
// }
kv1 := strings.SplitN(kvs[1], ":", 2)
// []string{
// "key2",
// "key:value",
// }
That is, you can split the string by spaces () to get each key/value pair, then you can split by colons (
:
) to split each pair into their own parts. Finally, you just need to add each pair to the map!
Notice that when you call strings.SplitN(...)
with -1 as the final argument it will split the input string into as many substrings as are present:
kv1 := strings.SplitN(kvs[1], ":", -1) // Note the -1 here
// []string{
// "key2",
// "key",
// "value",
// }