dongzhou4727
dongzhou4727
2018-03-12 23:54
浏览 28

如何在Golang中将地图解压缩为字符串格式的关键字参数?

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.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • dongtuo2373
    dongtuo2373 2018-03-13 00:02

    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)
    }
    
    点赞 评论
  • dsj83686
    dsj83686 2018-03-13 06:57

    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

    点赞 评论
  • dpoxk64080
    dpoxk64080 2018-03-13 07:12

    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)
    }
    
    点赞 评论

相关推荐