Home > Backend Development > Golang > How to pass in a 'created on the way' map in a Go template

How to pass in a 'created on the way' map in a Go template

WBOY
Release: 2024-02-05 23:39:03
forward
633 people have browsed it

How to pass in a created on the way map in a Go template

Question content

I want to make something like UI components 100% reusable in Go templates, but I don't know if it can be done. So I'm trying to do the next step:

<code>{{define "components/menu-button"}}
<a href="{{.link}}" class="text-white">{{.content}}</a>
{{end}}
</code>
Copy after login

This is my component, it requires a map because the properties are lowercase.

Then in my homepage I have a small menu that uses the components/menu-button component 3 times in my navbar:

<code><div class="hidden gap-4 sm:flex">
    {{template "components/menu-button" {"link": "/contact", "content": "Contact"}}}
    {{template "components/menu-button" {"link": "/docs", "content": "Docs"}}}
    {{template "components/menu-button" {"link": "/download", "content": "Download"}}}
</div>
</code>
Copy after login

But I don't know if I can somehow create a map like I did in the example and it would be like JSON, but I tried.

BTW, it gave me the next error:

unexpected "{" in template clause
Copy after login


Correct answer


Go's templates do not support this syntax.

What you can do is declare a custom function like

func MakeMap(kvs ...any) map[any]any {
    m := make(map[any]any)
    for i := 0; i < len(kvs)-1; i+=2 {
        m[kvs[i]] = kvs[i+1]
    }
    return m
}
Copy after login

You can then make the function available to templates (*templates).Funcs using , e.g.

t.Funcs(template.FuncMap{"M":MakeMap})
Copy after login

Then, within the template, you can call the function using the key M.

{{template "components/menu-button" (M "link" "/contact" "content" "Contact")}}
Copy after login

https://www.php.cn/link/0740bb92e583cd2b88ec7c59f985cb41

The above is the detailed content of How to pass in a 'created on the way' map in a Go template. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template