登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-03-16 22:54:29 261浏览 收藏

在 Go 模板中,连接用引号引起来的、逗号分隔的字符串列表(例如“字符串1”,“字符串2”,“字符串3”)时,可以使用以下方法: * **使用 {{if}} 条件语句:**直接将引号添加到模板中,并仅在需要时使用 {{if}} 打印逗号。 * **使用 printf 函数:**使用内置 printf 函数引用字符串,以转义名称中的特殊字符(如 ")。 这两个方法都可以在不添加自定义模板函数的情况下,使用通用的模板工具实现。

问题内容

使用 go 模板,我一直在尝试渲染一个用引号引起来的、以逗号分隔的字符串列表

例如“字符串1”,“字符串2”,“字符串3”

我想要渲染的字符串来自结构体切片。请参阅本示例中的 tags

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
}

请参见演示

考虑到以下约束,这如何完成? :

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

解决方案


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

templatestring = `{{range $i, $v := .tags}}{{if $i}} ,{{end}}"{{.name}}"{{end}}`

playground example

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

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

playground example

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《连接用引号引起来的、逗号分隔的字符串(给定包含这些字符串的结构列表)》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>