登录
首页 >  Golang >  Go问答

Go模板删除范围循环中的最后一个逗号

来源:Golang技术栈

时间:2023-03-21 11:16:15 403浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《Go模板删除范围循环中的最后一个逗号》就很适合你!本篇内容主要包括Go模板删除范围循环中的最后一个逗号,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我有这样的代码:

package main

import (
    "text/template"
    "os"
)

func main() {
    type Map map[string]string
    m := Map {
        "a": "b",
        "c": "d",
    }
    const temp = `{{range $key, $value := $}}key:{{$key}} value:{{$value}},{{end}}`
    t := template.Must(template.New("example").Parse(temp))
    t.Execute(os.Stdout, m)
}

它将输出:

键:a 值:b,键:c 值:d,

但我想要这样的东西:

键:a 值:b,键:c 值:d

我不需要最后一个逗号,如何删除它。我在这里找到了循环数组的解决方案:[https](https://groups.google.com/d/msg/golang- nuts/XBScetK-guk/Bh7ZFz6R3wQJ) ://groups.google.com/d/msg/golang-nuts/XBScetK- guk/Bh7ZFz6R3wQJ ,但我无法获取地图的索引。

正确答案

以下是如何使用模板函数编写逗号分隔的键值对。

声明一个函数,该函数返回一个递增并返回一个计数器的函数:

func counter() func() int {
    i := -1
    return func() int {
        i++
        return i
    }
}

将此函数添加到模板中:

t := template.Must(template.New("example").Funcs(template.FuncMap{"counter": counter}).Parse(temp))

像这样在模板中使用它:

    {{$c := counter}}{{range $key, $value := $}}{{if call $c}}, {{end}}key:{{$key}} value:{{$value}}{{end}}

此模板将分隔符写在键值对之前而不是在键值对之后。

计数器在循环之前创建,并在循环的每次迭代中递增。分隔符不是第一次通过循环写入的。

在操场上运行它。

模板中的逻辑可以通过将 if 语句移动到 Go 代码来简化:

func separator(s string) func() string {
    i := -1
    return func() string {
        i++
        if i == 0 {
            return ""
        }
        return s
    }
}

将函数添加到模板中:

t := template.Must(template.New("example").Funcs(template.FuncMap{"separator": separator}).Parse(temp))

像这样使用它:

{{$s := separator ", "}}{{range $key, $value := $}}{{call $s}}key:{{$key}} value:{{$value}}{{end}}

在操场上运行它

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Go模板删除范围循环中的最后一个逗号》文章吧,也可关注golang学习网公众号了解相关技术文章。

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