Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 连接带引号、逗号分隔的字符串(给定包含这些字符串的结构列表)_Json_Go_Go Templates - Fatal编程技术网

Json 连接带引号、逗号分隔的字符串(给定包含这些字符串的结构列表)

Json 连接带引号、逗号分隔的字符串(给定包含这些字符串的结构列表),json,go,go-templates,Json,Go,Go Templates,使用go模板,我一直在尝试呈现一个带引号、逗号分隔的字符串列表 e、 g.“string1”、“string2”、“string3” 我要渲染的字符串来自结构的一部分。请参见本例中的标记: package main import ( "fmt" "log" "os" "strings" "text/template" ) const ( templateString = `{{range .Tags}}"{{.Name}}", {{end}}`

使用go模板,我一直在尝试呈现一个带引号、逗号分隔的字符串列表

e、 g.
“string1”、“string2”、“string3”

我要渲染的字符串来自结构的一部分。请参见本例中的
标记

package main

import (
    "fmt"
    "log"
    "os"
    "strings"
    "text/template"
)

const (
    templateString = `{{range .Tags}}"{{.Name}}", {{end}}`
)

var (
    funcs = template.FuncMap{
        "join":  strings.Join,
        "quote": func(in string) string { return fmt.Sprintf("\"%s\"", in) },
    }
    renderData = Task{
        Name:        "something to do",
        Description: "Do that thing",
        Tags: &[]Tag{
            Tag{Name: "tag1"},
            Tag{Name: "tag2"},
        },
    }
)

func main() {
    tmpl, err := template.New("master").Funcs(funcs).Parse(templateString)
    if err != nil {
        log.Fatal(err)
    }

    if err := tmpl.Execute(os.Stdout, renderData); err != nil {
        log.Fatal(err)
    }

}

type Task struct {
    Name        string
    Description string
    Tags        *[]Tag
}

type Tag struct {
    Name string
}

在以下限制条件下,如何做到这一点

  • 我不应该添加任何太具体的模板函数(例如,一个连接和引用
    .Name
    s的
    标签的函数)(因为我的用户只能编辑模板,而不能使用代码/模板函数,我应该尝试使用相同的工具解决问题,这意味着模板和可能非常通用的函数)

仅在需要时使用
{{if}
打印逗号。将引号直接添加到模板中:

templateString = `{{range $i, $v := .Tags}}{{if $i}} ,{{end}}"{{.Name}}"{{end}}`

如果要在名称中转义
,请使用内置的printf函数引用字符串:

templateString = `{{range $i, $v := .Tags}}{{if $i}} ,{{end}}{{printf "%q" .Name}}{{end}}`

{{if$i}}
这很聪明