메모리 재할당이 없는 Variadic 래퍼
Variadic 함수는 매개변수 처리에 유연성을 제공하지만 래퍼 함수에 항목을 추가하면 메모리 재할당이 발생할 수 있습니다. 이 문서에서는 디버깅 편의성을 유지하면서 이 문제를 방지할 수 있는 솔루션을 탐색합니다.
가변 래퍼를 만드는 일반적인 접근 방식 중 하나는 인수를 내부 함수에 직접 전달하는 것입니다.
<code class="go">func Debug(a ...interface{}) { if debug { fmt.Fprintln(out, prefix, sep, a...) } }</code>
그러나 이 문서는 "인수 너무 많음" 오류가 발생할 수 있습니다. 또 다른 접근 방식은 vararg를 사용하여 인수를 래핑하는 것입니다. 그러나 이렇게 하면 "인터페이스 유형에 이름 목록이 허용되지 않습니다."라는 오류가 발생합니다.
유효해 보이는 해결책은 임시 슬라이스를 만들고 접두사, 구분 기호,
<code class="go">func Debug(a ...interface{}) { if debug { sl := make([]interface{}, len(a)+2) sl[0] = prefix sl[1] = sep for i, v := range a { sl[2+i] = v } fmt.Fprintln(out, sl...) } }</code>
이 방법은 작동하지만 불필요한 메모리 할당이 필요합니다.
Slick 솔루션으로 추가
더 효율적입니다. 접근 방식은 추가 기능을 활용하는 것입니다. 원래 인수에 접두사와 구분 기호를 추가하면 메모리 재할당을 피할 수 있습니다.
<code class="go">func Debug(a ...interface{}) { if debug { fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...)...) } }</code>
이 한 줄짜리 방법은 새 슬라이스를 생성하지 않고도 가변 인수에 접두사와 구분 기호를 효과적으로 추가합니다. 이는 간결하고 효율적이며 가변 래퍼의 기능을 손상시키지 않으면서 메모리 할당 문제를 해결합니다.
위 내용은 Variadic 래퍼 함수에서 메모리 재할당을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!