>백엔드 개발 >Golang >래퍼 함수에서 가변 매개변수를 사용할 때 `fmt.Sprintf`가 예상치 못한 출력을 생성하는 이유는 무엇입니까?

래퍼 함수에서 가변 매개변수를 사용할 때 `fmt.Sprintf`가 예상치 못한 출력을 생성하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-16 07:59:031018검색

Why does `fmt.Sprintf` produce unexpected output when using a variadic parameter in a wrapper function?

래퍼 함수에서 Variadic 매개변수 풀기

Go의 Variadic 함수는 임의 개수의 인수를 받아들이는 데 중요한 역할을 합니다. 이 기능을 효과적으로 활용하려면 이러한 매개변수가 어떻게 처리되는지 이해하는 것이 중요합니다.

fmt.Fprintf 래퍼 함수의 예를 고려하세요.

Die(" foo"), 다소 예상치 못한 출력이 나타납니다: foo%!(EXTRA []interface {}=[]). 이 난해한 접미사는 가변 매개변수가 전달되는 방식에 기인할 수 있습니다.

설계상 가변 함수는 해당 유형의 조각으로 인수를 받습니다. 이 경우 Die 함수는 args라는 []인터페이스{} 슬라이스를 허용합니다. 그러나 이후에 이 인수를 fmt.Sprintf에 전달하면 의도한 개별 값이 아닌 []interface{} 유형의 단일 엔터티로 처리됩니다.

이를 수정하려면 ... 구문을 다음과 같이 지정해야 합니다. 아래와 같이 사용됩니다.

이 접근 방식을 사용하면 args 내의 각 값이 별도의 인수로 fmt.Sprintf에 전달되어 다음을 모방합니다. Die 함수에서 이를 수신할 때의 동작. 이 중요한 차이점은 Go 언어 사양과 일치하며 예상되는 출력을 보장합니다.

위 내용은 래퍼 함수에서 가변 매개변수를 사용할 때 `fmt.Sprintf`가 예상치 못한 출력을 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.