Golang 相当于使用 F 字符串的 Python 格式化字符串

ube*_*ebu 5 python format go

在 python 中,可以使用 f-string 来格式化字符串,如下所示

name1 = 'Ele'
name2 = 'Ben'
name3 = 'Frank'
age = 45

print(f"My name is {name1} but i also get called {name2} and at times {name3}. Generally I prefer {name1} and my age is {age}")
Run Code Online (Sandbox Code Playgroud)

golang 相当于什么?我可以在哪里准确指定哪个变量在哪个位置

目前,这就是我在 golang 中看到的所有内容,但它会不必要地创建重复变量,如下所示

name1 := "Ele"
name2 := "Ben"
name3 := "Frank"
age := 45

message := fmt.Sprintf("My name is %s but i also get called %s and at times %s. Generally I prefer %s and my age is %d", name1, name2, name3, name1, age)

fmt.Println(message)

Run Code Online (Sandbox Code Playgroud)

想象一下,如果我需要在同一个字符串中多次重复一个变量,我将不得不不断重复它,然后需要始终监视变量的位置以确保它们正确对齐

golang有没有类似于python中的f-string的方法?

chu*_*ckx 1

您可以使用text/template

对于这个简单的示例来说,这有点大材小用,但在处理复杂的模板、大量输出等时,这是值得的。

package main

import (
    "bytes"
    "fmt"
    "log"
    "text/template"
)

func main() {
    data := fdata{
        "Name1": "Ele",
        "Name2": "Ben",
        "Name3": "Frank",
        "Age":   45,
    }
    format := "My name is {{.Name1}} but I also get called {{.Name2}} and at times {{.Name3}}. Generally I prefer {{.Name1}} and my age is {{.Age}}."

    result, err := fstring(format, data)
    if err != nil {
        log.Fatalf("fstring() failed: %v", err)
    }

    fmt.Println(result)
}

type fdata map[string]interface{}

func fstring(format string, data fdata) (string, error) {
    t, err := template.New("fstring").Parse(format)
    if err != nil {
        return "", fmt.Errorf("error creating template: %v", err)
    }
    output := new(bytes.Buffer)
    if err := t.Execute(output, data); err != nil {
        return "", fmt.Errorf("error executing template: %v", err)
    }
    return output.String(), nil
}
Run Code Online (Sandbox Code Playgroud)

输出:

My name is Ele but I also get called Ben and at times Frank. Generally I prefer Ele and my age is 45.
Run Code Online (Sandbox Code Playgroud)

去游乐场