В Python вы можете сделать это:
"File {file} had error {error}".format(file=myfile, error=err)
или это:
"File %(file)s had error %(error)s" % {"file": myfile, "error": err}
В Go самый простой вариант:
fmt.Sprintf("File %s had error %s", myfile, err)
который не позволяет вам менять порядок параметров в строке формата, что вам нужно сделать для I18N. Go имеет пакет template
, для которого требуется что-то вроде:
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)
}
который кажется длинным путем для сообщения об ошибке. Есть ли более разумный вариант, который позволяет мне задавать строковые параметры независимо от порядка?