Rumah >pembangunan bahagian belakang >Golang >teks/template golang bermula dengan fungsi

teks/template golang bermula dengan fungsi

WBOY
WBOYke hadapan
2024-02-06 11:15:03615semak imbas

golang 文本/模板以函数开头

Kandungan soalan

Saya dalam fungsi go text/template 包中没有看到任何类型的 startswith. Adakah ini pelaksanaan terbaik?

{{if eq (slice $c 0 5) "begin"}}

Jawapan betul


Tiada fungsi templat terbina dalam. startswith

Perkara paling bersih ialah jika anda mendaftarkan fungsi tersuai dengan fungsi tersebut:

func main() {
    t := template.must(template.new("").funcs(template.funcmap{
        "hasprefix": strings.hasprefix,
    }).parse(src))

    for _, s := range []string{"foo", "begining"} {
        if err := t.execute(os.stdout, s); err != nil {
            panic(err)
        }
    }
}

const src = `{{.}}: {{if hasprefix . "begin"}}yes{{else}}no{{end}}
`

Ini akan menghasilkan (cuba di

pergi taman permainan):

foo: no
begining: yes

Jika anda tidak boleh atau tidak mahu mendaftarkan fungsi tersuai,

berfungsi dengan rentetan, tetapi anda perlu berhati-hati dengannya: jika rentetan input lebih pendek daripada 5 bait, anda akan mendapat ralat pelaksanaan templat! slice

Sebaliknya (jika anda tidak mahu mendaftar fungsi tersuai), saya cadangkan menggunakan terbina dalam

tanpa panik: printf 函数,精度是要比较的字符串的长度。如果输入字符串较短,printf

{{if eq (printf "%.5s" .) "begin"}}yes{{else}}no{{end}}

Keluaran ini adalah sama. Cuba ini di

pergi taman permainan.

Sila ambil perhatian, gunakan

). hasprefix 更安全、更干净、更简单,因为我们不必硬编码前缀的长度 (5

Perhatikan bahawa menggunakan

pengindeksan parameter eksplisit kita juga boleh menjadikan bahagian ini dinamik:

{{$prefix := "begin"}}{{if eq (printf "%.[1]*s" (len $prefix) .) $prefix}}yes{{else}}no{{end}}

Seperti yang anda lihat, kita boleh menyingkirkan panjang kod keras awalan

. Ini sekali lagi mengeluarkan kandungan yang sama, cuba di 5go playground.

Satu perkara terakhir yang perlu diperhatikan: rentetan hirisan mentafsirkan indeks sebagai

indeks bait, manakala ketepatan yang digunakan dalam rentetan format ditafsirkan sebagai kiraan rune!

Atas ialah kandungan terperinci teks/template golang bermula dengan fungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam