ホームページ > バックエンド開発 > 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 は同様の方法で動作します:

fmt.Sprintf("File %s had error %s", myfile, err)
ログイン後にコピー

ただし、Sprintf には制限があります。書式文字列内のパラメーターの順序が引数の順序と一致する必要があります。これは、プレースホルダーの順序が言語によって異なる可能性がある国際化 (I18N) にとって問題となる可能性があります。

テキスト/テン​​プレートの使用

Go が提供するものtext/template と呼ばれる、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)
}
ログイン後にコピー

このテンプレートベースのアプローチにより、文字列の書式設定をより柔軟に制御できるようになります。

文字列.Replacer

文字列.Replacer type を使用して、カスタム名のプレースホルダーを許可するフォーマッタを実装できます。

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))
}
ログイン後にコピー

このアプローチは単純で使いやすいです。

明示的な引数インデックスの使用

もう 1 つのオプションは、フォーマット文字列で明示的な引数インデックスを使用し、プレースホルダーを許可することです。複数回再利用する場合:

fmt.Printf("File %[1]s had error %[1]s", myfile, err)
ログイン後にコピー

このアプローチは、以前のアプローチほど汎用性は劣りますが、単純な場合には役立ちます。

以上がGo で Python の「string.format」に相当するものは何ですか?また、柔軟性と機能性の点でどのように比較されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート