Golang에서 strings.Builder와 빠르게 연결

9152 단어 goalgorithmsstrings


게시물Concatenating with strings.Builder Quickly in GolangQvault에 처음 등장했습니다.

Go 표준 라이브러리를 사용하면 문자열을 쉽게 연결할 수 있습니다. 연결은 더 큰 문자열을 만들기 위해 문자열을 함께 추가하는 멋진 단어입니다. 예를 들어 "hello" , " ""world" 를 연결하면 "hello world" 가 됩니다.

내장fmt.Sprintf 함수는 형식과 가변 인터페이스 목록을 입력으로 사용합니다.

func Sprintf(format string, a ...interface{}) string


서식 지정 옵션을 사용하면 최종 문자열이 어떻게 보이는지 템플릿을 지정한 다음 문자열에 보간될 입력을 추가할 수 있습니다.

s := fmt.Sprintf("%v has been subscribed since %v.\n", user.Name, user.CreatedAt)

%v는 주어진 인수가 무엇이든 간에 기본 형식으로 대체되는 간단한 토큰입니다. 우리의 경우에는 stringtime.Time 였습니다. 모든 서식 옵션은 documentation을 확인하십시오.

효율적인 문자열 연결



Go 1.10+는 문자열을 보다 효율적으로 빌드할 수 있는 Awesomestrings.Builder 유형을 출시했습니다. strings.Builder는 메모리 복사를 최소화하기 때문에 대량 문자열 연결을 수행할 때 고성능 옵션입니다.

빠르게 사용자 목록 작성 – 예



먼저 빈 빌더를 만들어 봅시다.

var builder strings.Builder


다음으로 목록에 제목 문자열을 추가해 보겠습니다.

b.WriteString("user list\n")


이제 0-9를 반복하고 각 숫자에 대해 "user #{i} "를 포함하는 줄을 작성합니다. strings.Builderio.Writer interface 을 구현하므로 표준 fmt.Fprintf 함수를 사용할 수 있습니다.

for i := 0; i < 10; i++ {
    fmt.Fprintf(&b, "user #%d\n", i)
}


전체 문자열을 실제로 인쇄하려면 String() 메서드를 사용할 수 있습니다.

fmt.Println(b.String())


전체 코드:

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.WriteString("user list\n")
    for i := 0; i < 10; i++ {
        fmt.Fprintf(&b, "user #%d\n", i)
    }
    fmt.Println(b.String())
}


더 빠른 속도를 위한 사전 할당



문자열 작성 속도를 정말로 높이고 싶고 최종 문자열의 크기를 이미 알고 있는 경우 작성기Grow() 메서드를 사용하여 버퍼 크기를 미리 할당할 수 있습니다. 이렇게 하면 메모리를 동적으로 늘릴 필요가 없도록 코드를 절약할 수 있습니다.

// Grow grows b's capacity, if necessary, to guarantee space for another n bytes.
// After Grow(n), at least n bytes can be written to b without another allocation.
// If n is negative, Grow panics.
func (b *Builder) Grow(n int)


따라서 우리의 예를 미리 할당하기 위해 다음을 수행할 수 있습니다.

package main

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder
    b.Grow(90) // we will be writing 90 bytes
    b.WriteString("user list\n")
    for i := 0; i < 10; i++ {
        fmt.Fprintf(&b, "user #%d\n", i)
    }
    fmt.Println(b.String())
}


읽어 주셔서 감사합니다. 이제 과정을 수강하십시오!

기술 분야의 고임금 직업에 관심이 있으십니까? 실습 코딩 과정을 마친 후 인터뷰를 시작하고 멋지게 통과합니다.

Start coding now

질문?



질문이나 의견이 있으면 트위터에서 나를 팔로우하고 연락하십시오. 기사에서 실수를 한 경우 반드시 let me know 수정하여 수정할 수 있도록 해주세요!

Subscribe 받은 편지함으로 바로 전달되는 더 많은 코딩 기사를 보려면 내 뉴스레터로 보내십시오.

좋은 웹페이지 즐겨찾기