В го нет "магии" и есть статическая типизация.
Всю "магию" нужно писать в лоб.
Переписал ваш пример на го, но это будет работать если тип у поля value всегда будет int, но если там будут разные типы, придётся использовать interface, что не очень хорошо.
Го не подойдёт, если данные не типизированы(появится морока с конвертацией, а так же снизится производительность, в сравнении с типизированным подходом).
https://play.golang.org/p/eGfphNwZqRRКодpackage main
import (
"fmt"
)
func main() {
type KV struct {
Name string
Value int
}
data := []KV{
{
Name: "width",
Value: 100,
},
{
Name: "height",
Value: 300,
},
}
result := make(map[string]int)
// reduce
for _, v := range data {
result[v.Name] = v.Value
}
fmt.Printf("%#v", result) // map[string]int{"width":100, "height":300}
}
Пример с интерфейсом и разными типами:
https://play.golang.org/p/OXUVv58YZoaКодpackage main
import (
"fmt"
)
func main() {
type KV struct {
Name string
Value interface{}
}
data := []KV{
{
Name: "width",
Value: 100,
},
{
Name: "height",
Value: 300,
},
{
Name: "image",
Value: "cat.jpg",
},
}
result := make(map[string]interface{})
for _, v := range data {
result[v.Name] = v.Value
}
fmt.Printf("%#v", result) // map[string]interface {}{"width":100, "height":300, "image":"cat.jpg"}
}