In Python, to format a string with a dictionary, one can simply do:
geopoint = {
'latitude': 41.123,
'longitude':71.091
}
print('{latitude} {longitude}'.format(**geopoint))
The output will be 41.123 71.091
. How do I achieve the same keyword unpacking of maps for string formatting in Go?
EDIT: Sorry if this was unclear in the question, but what I want to do is, like in Python, provide the keys for the values inside the format string.
I recommend using a struct to have your fields and then add method String
.
code: https://play.golang.org/p/ine_9GwK5o-
package main
import (
"fmt"
)
type Point struct {
latitude float64
longitude float64
}
func (p Point) String() string {
return fmt.Sprintf("%f %f", p.latitude, p.longitude)
}
func main() {
geoP:= Point{latitude:41.123, longitude:71.091}
fmt.Println(geoP)
}
If I am not getting you wrong you can achieve the same like this:
package main
import (
"fmt"
)
var geopoint map[string]float64
func main() {
geopoint = make(map[string]float64)
geopoint["latitude"] = 41.123
geopoint["longitude"] = 71.091
fmt.Println(fmt.Sprintf("latitude : %f
longitude : %f", geopoint["latitude"], geopoint["longitude"]))
}
Output:
latitude : 41.123000
longitude : 71.091000
Check in playground: https://play.golang.org/p/g5DXb5iSeBY
Carpetsmoker's idea, but the solution using text/template looks something like this.
https://play.golang.org/p/s2lPgA-Xa6C
package main
import (
"os"
"text/template"
)
func main() {
geopoint := map[string]float64{
"latitude": 41.123,
"longitude": 71.091,
}
template.Must(template.New("").Parse(`{{ .latitude }} {{ .longitude }}`)).Execute(os.Stdout, geopoint)
}