> 백엔드 개발 > Golang > Python의 `string.format`에 해당하는 Go 기능은 무엇이며 유연성과 기능면에서 어떻게 비교됩니까?

Python의 `string.format`에 해당하는 Go 기능은 무엇이며 유연성과 기능면에서 어떻게 비교됩니까?

Susan Sarandon
풀어 주다: 2024-12-29 17:56:20
원래의
882명이 탐색했습니다.

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)
}
로그인 후 복사

이 템플릿 기반 접근 방식을 사용하면 문자열 서식을 더 유연하게 제어하고 제어할 수 있습니다.

With 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)
로그인 후 복사

이 접근 방식은 이전 접근 방식보다 활용도가 떨어지지만 간단한 경우에 유용할 수 있습니다.

위 내용은 Python의 `string.format`에 해당하는 Go 기능은 무엇이며 유연성과 기능면에서 어떻게 비교됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿