> 백엔드 개발 > Golang > Go에서 Variadic 함수에 전달할 때 여러 반환 값을 처리하는 방법은 무엇입니까?

Go에서 Variadic 함수에 전달할 때 여러 반환 값을 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-18 21:56:14
원래의
708명이 탐색했습니다.

How to Handle Multiple Return Values When Passing to Variadic Functions in Go?

가변 함수를 사용한 여러 반환 값

다음과 같이 여러 정수 값을 반환하는 Go 함수가 있다고 가정합니다.

func temp() (int, int) {
    return 1, 1
}
로그인 후 복사

직관적으로 temp 결과를 Printf에 직접 전달하고 다음을 사용하여 두 값을 모두 인쇄할 수 있습니다. 문자열 형식:

fmt.Printf("first= %d and second = %d", temp())
로그인 후 복사

그러나 temp는 두 개의 값을 반환하는 반면 Printf는 하나만 예상하기 때문에 이 접근 방식은 작동하지 않습니다.

이 제한의 이유는 Go 함수 호출 사양에 있습니다. 함수에 final ... 매개변수가 있는 경우(Printf와 마찬가지로) 다른 함수의 나머지 반환 값만 할당할 수 있다고 명시되어 있습니다. 이는 다른 함수에 하나 이상의 반환 값이 있어야 함을 의미합니다.

문자열 보간 사용

Printf를 사용하는 대신 문자열 보간을 활용하여 목표를 달성할 수 있습니다.

a, b := temp()
fmt.Println("first=", a, "and second =", b)
로그인 후 복사

포장 반품 값

Printf와 같은 가변 함수에 여러 반환 값을 전달하려면 Wrap이라는 유틸리티 함수를 활용할 수 있습니다. 임의의 수의 인터페이스{} 값을 사용하고 인터페이스{} 값의 조각을 반환합니다.

func wrap(vs ...interface{}) []interface{} {
    return vs
}
로그인 후 복사

이 유틸리티를 사용하면 하나 이상의 반환 값이 있는 모든 함수의 반환 값을 결과 슬라이스를 래핑하고 사용하여 Printf를 호출합니다.

fmt.Printf("1: %v, 2: %v\n", wrap(oneInt())...)
fmt.Printf("1: %v, 2: %v\n", wrap(twoInts())...)
fmt.Printf("1: %v, 2: %v, 3: %v\n", wrap(threeStrings())...)
로그인 후 복사

여기서 oneInt, twoInts 및 threeStrings는 단일 정수, 정수 튜플을 반환하는 함수입니다. 및 문자열 튜플을 각각 사용합니다.

이 접근 방식은 가변 함수에 하나의 반환 값만 전달하는 제한을 우회하여 원하는 대로 함수의 여러 반환 값을 인쇄할 수 있도록 합니다.

위 내용은 Go에서 Variadic 함수에 전달할 때 여러 반환 값을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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