code referenced by the comment은 기록 된대로 메모리가 효율적입니다. 모든 할당은 메모리 할당을 최소화하기 위해 작성된 strings.Join
에 있습니다.
나는 코멘트가 실수로이 code in the net/http package에서 복사 및 붙여 넣기 것으로 의심 :
// TODO: could do better allocation-wise here, but trailers are rare,
// so being lazy for now.
if _, err := io.WriteString(w, "Trailer: "+strings.Join(keys, ",")+"\r\n"); err != nil {
return err
}
이 조각은 다음과 같은 가능한 할당이 있습니다에 대한
더 효율적인 메모리 방법은 데이터가 기록되기 위해서는 하나 []byte
을 할당하는 것이다.
n := len("Trailer: ") + len("\r\n")
for _, s := range keys {
n += len(s) + 1
}
p := make([]byte, 0, n-1) // subtract 1 for len(keys) - 1 commas
p = append(p, "Trailer: "...)
for i, s := range keys {
if i > 0 {
p = append(p, ',')
}
p = append(p, s...)
}
p = append(p, "\r\n"...)
w.Write(p)
링크를 특별히 언급하지는 않지만'strings.Join()'은 연결을 위해 많은 할당과 복사를 수행합니다. 큰 문자열의 경우, 이것은 Buffer /'io.Writer'와 같은 다른 접근법에 비해 비쌀 수 있습니다. – Nadh