首頁 > 後端開發 > Golang > Go 中 Python 的「string.format」等價物是什麼?

Go 中 Python 的「string.format」等價物是什麼?

Susan Sarandon
發布: 2024-12-29 17:56:20
原創
881 人瀏覽過

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

相當於 Go 中的 Python string.format?

在Python 中,可以使用string.format 將值插入字串帶有這樣的佔位符:

"File {file} had error {error}".format(file=myfile, error=err)
登入後複製

Go 有一個等效的函數,稱為Sprintf,其工作原理與way:

fmt.Sprintf("File %s had error %s", myfile, err)
登入後複製

但是,Sprintf有一個限制:它要求格式字串中參數的順序與參數的順序相符。這可能是國際化 (I18N) 的問題,其中佔位符的順序可能會因語言而異。

使用文字/範本

Go 提供Sprintf 的更靈活替代方案稱為文字/範本。它允許對格式進行更多控制,包括指定佔位符順序的能力:

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)
}
登入後複製

這種基於模板的方法可以提供更大的靈活性和對字串格式的控制。

與strings.Replacer

可以使用strings.Replacer 類型來實作允許使用自訂名稱的佔位符的格式化程式:

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))
}
登入後複製

這種方法簡單易用。

使用明確參數索引

另一個選擇是在格式字串中使用明確參數索引,允許佔位符重複使用多個times:

fmt.Printf("File %[1]s had error %[1]s", myfile, err)
登入後複製

這種方法的通用性不如以前的方法,但對於簡單的情況很有用。

以上是Go 中 Python 的「string.format」等價物是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板