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) }
이 템플릿 기반 접근 방식을 사용하면 문자열 서식을 더 유연하게 제어하고 제어할 수 있습니다.
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)
이 접근 방식은 이전 접근 방식보다 활용도가 떨어지지만 간단한 경우에 유용할 수 있습니다.
위 내용은 Python의 `string.format`에 해당하는 Go 기능은 무엇이며 유연성과 기능면에서 어떻게 비교됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!