Go에서 슬라이스 조각을 Variadic 함수로 압축 해제하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-28 12:14:31
원래의
517명이 탐색했습니다.

How to Unpack a Slice of Slices into a Variadic Function in Go?

가변 함수 및 압축되지 않은 슬라이스 슬라이스

여러 인수를 허용하는 가변 함수로 작업할 때 슬라이스 슬라이스를 처리하는 것이 어려울 수 있습니다. 다음은 슬라이스 조각을 풀면 컴파일러 오류가 발생할 수 있는 구체적인 사례입니다.

다음 가변 함수를 고려하세요.

<code class="go">func unpack(args ...interface{})</code>
로그인 후 복사

인터페이스 조각이 있으면 직접 전달할 수 있습니다. 문제 없이 함수에 추가:

<code class="go">slice := []interface{}{1, 2, 3}
unpack(slice) // works
unpack(slice...) // also works</code>
로그인 후 복사

그러나 인터페이스 조각이 있는 경우 압축을 푼 버전을 전달하려고 하면 컴파일 오류가 발생합니다.

<code class="go">sliceOfSlices := [][]interface{}{
    []interface{}{1, 2},
    []interface{}{101, 102},
}
unpack(sliceOfSlices) // works
unpack(sliceOfSlices...) // compiler error</code>
로그인 후 복사

오류 메시지는 다음과 같습니다.

cannot use sliceOfSlices (type [][]interface {}) as type []interface {} in argument to unpack
로그인 후 복사

이 동작을 이해하려면 Go에서 가변 매개변수에 인수를 전달하기 위한 사양을 자세히 조사해야 합니다.

"마지막 인수가 할당 가능한 경우 슬라이스 유형 []T에 대해 인수 뒤에 ...."가 오면 ...T 매개변수의 값으로 변경되지 않고 전달될 수 있습니다."

이 경우 가변 매개변수는 ...interface{}이며, args([]interface{} 유형)에 대한 SliceOfSlices([][]interface{} 유형)를 직접 할당하는 것은 유효하지 않습니다.

따라서, 압축이 풀린 SliceOfSlices의 내용을 unpack()으로 어떻게 보낼 수 있나요? 해결책은 []interface{} 유형의 새 슬라이스를 생성하고 요소를 복사한 다음 ....

<code class="go">var sliceOfSlices2 []interface{}
for _, v := range sliceOfSlices {
    sliceOfSlices2 = append(sliceOfSlices2, v)
}

unpack(sliceOfSlices2...)</code>
로그인 후 복사

을 사용하여 전달하는 것입니다. 이 방법을 사용하면 각 내부 슬라이스가 요소로 표시됩니다. ...interface{} 가변 매개변수와 호환됩니다.

위 내용은 Go에서 슬라이스 조각을 Variadic 함수로 압축 해제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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