Rumah > pembangunan bahagian belakang > Golang > Apakah persamaan Go dengan `string.format` Python dan bagaimana ia membandingkan dalam fleksibiliti dan kefungsian?

Apakah persamaan Go dengan `string.format` Python dan bagaimana ia membandingkan dalam fleksibiliti dan kefungsian?

Susan Sarandon
Lepaskan: 2024-12-29 17:56:20
asal
882 orang telah melayarinya

What are the Go equivalents to Python's `string.format` and how do they compare in flexibility and functionality?

Setara dengan Python string.format dalam Go?

Dalam Python, anda boleh menggunakan string.format untuk memasukkan nilai ke dalam rentetan dengan ruang letak seperti ini:

"File {file} had error {error}".format(file=myfile, error=err)
Salin selepas log masuk

Go mempunyai fungsi setara yang dipanggil Sprintf, yang berfungsi dengan cara yang serupa:

fmt.Sprintf("File %s had error %s", myfile, err)
Salin selepas log masuk

Walau bagaimanapun, Sprintf mempunyai had: ia memerlukan susunan parameter dalam rentetan format untuk memadankan susunan argumen. Ini boleh menjadi masalah untuk pengantarabangsaan (I18N), di mana susunan pemegang tempat mungkin berbeza-beza bergantung pada bahasa.

Menggunakan teks/template

Go menyediakan alternatif yang lebih fleksibel kepada Sprintf dipanggil teks/templat. Ia membolehkan lebih kawalan ke atas pemformatan, termasuk keupayaan untuk menentukan susunan pemegang tempat:

package main

import (
    "bytes"
    "text/template"
    "os"
)

func main() {
    type Params struct {
        File string
        Error string
    }

    var msg bytes.Buffer

    params := &Params{
        File: "abc",
        Error: "def",
    }

    tmpl, _ := template.New("errmsg").Parse("File {{.File}} has error {{.Error}}")
    tmpl.Execute(&msg, params)
    msg.WriteTo(os.Stdout)
}
Salin selepas log masuk

Pendekatan berasaskan templat ini membolehkan lebih fleksibiliti dan kawalan ke atas pemformatan rentetan.

Dengan rentetan.Pengganti

Rentetan.Pengganti jenis boleh digunakan untuk melaksanakan pemformat yang membenarkan pemegang tempat dengan nama tersuai:

package main

import (
    "fmt"
    "strings"
)

func main() {
    file, err := "/data/test.txt", "file not found"

    log("File {file} had error {error}", "{file}", file, "{error}", err)
}

func log(format string, args ...string) {
    r := strings.NewReplacer(args...)
    fmt.Println(r.Replace(format))
}
Salin selepas log masuk

Pendekatan ini mudah dan mudah digunakan.

Menggunakan indeks hujah eksplisit

Pilihan lain ialah menggunakan indeks hujah eksplisit dalam rentetan format, membenarkan ruang letak untuk digunakan semula beberapa kali:

fmt.Printf("File %[1]s had error %[1]s", myfile, err)
Salin selepas log masuk

Pendekatan ini kurang serba boleh berbanding yang sebelumnya tetapi boleh berguna untuk kes mudah.

Atas ialah kandungan terperinci Apakah persamaan Go dengan `string.format` Python dan bagaimana ia membandingkan dalam fleksibiliti dan kefungsian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan