How to print the value of a key containing dots

前端 未结 4 1219
清歌不尽
清歌不尽 2021-02-12 09:39

I\'m trying to print the values of a map, whose keys have a dot (.) on it.

Example map:

type TemplateData struct {
    Data map[string] int
         


        
4条回答
  •  天涯浪人
    2021-02-12 10:09

    No you can't. According to the specs in http://golang.org/pkg/text/template/#Arguments, the key must be alphanumeric

    - The name of a key of the data, which must be a map, preceded
      by a period, such as
        .Key
      The result is the map element value indexed by the key.
      Key invocations may be chained and combined with fields to any
      depth:
        .Field1.Key1.Field2.Key2
      Although the key must be an alphanumeric identifier, unlike with
      field names they do not need to start with an upper case letter.
      Keys can also be evaluated on variables, including chaining:
        $x.key1.key2
    

    You can still print it by iterating over the Map package main

    import (
        "fmt"
        "html/template"
        "os"
    )
    
    type TemplateData struct {
        Data map[string]int
    }
    
    func main() {
        data := TemplateData{map[string]int{"core.value": 1, "test": 100}}
    
        t, err := template.New("foo").Parse(`{{range $key, $value := .Data}}
       {{$key}}: {{$value}}
    {{end}}`)
        if err != nil {
            fmt.Println(err)
        }
        err = t.Execute(os.Stdout, data)
        if err != nil {
            fmt.Println(err)
        }
    }
    

    http://play.golang.org/p/6xB_7WQ-59

提交回复
热议问题