>백엔드 개발 >Golang >Go에서 정규 슬라이스 인수와 분해 슬라이스 인수를 모두 Variadic 함수에 올바르게 전달할 수 있는 방법은 무엇입니까?

Go에서 정규 슬라이스 인수와 분해 슬라이스 인수를 모두 Variadic 함수에 올바르게 전달할 수 있는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 16:24:14325검색

How Can I Correctly Pass Both Regular and Exploded Slice Arguments to a Variadic Function in Go?

가변 함수 인수: Go에서 "분해된" 슬라이스와 일반 매개변수 혼합

Go 프로그래밍 언어는 가변 함수 인수를 사용하여 함수를 정의하는 기능을 제공합니다. "..." 구문을 사용하는 매개변수입니다. 이를 통해 함수는 가변 개수의 인수를 허용할 수 있습니다. 그러나 런타임 오류를 피하려면 가변 인수의 메커니즘을 이해하는 것이 중요합니다.

주어진 예에서:

func main() {
    stuff := []string{"baz", "bla"}
    foo("bar", stuff...)
}

func foo(s ...string) {
    fmt.Println(s)
}

의도는 일반 인수("bar")와 인수를 모두 전달하는 것입니다. foo 함수에 대한 "폭발된" 슬라이스(물건...). 그러나 이로 인해 "인수가 너무 많아" 컴파일 오류가 발생합니다.

이 동작의 이유는 가변 매개변수의 정의에 있습니다. Go에는 가변 매개변수에 대한 인수를 지정하는 두 가지 방법이 있습니다:

  1. 요소 열거: 슬라이스의 각 요소는 쉼표로 구분되어 개별적으로 전달됩니다.
  2. 기존 슬라이스 사용: 전체 슬라이스와 ...가 단일로 전달됩니다. 인수.

동일한 가변 매개변수 내에서 이 두 가지 방법을 혼합하는 것은 허용되지 않습니다. stuff...가 전달되면 슬라이스 자체가 가변 매개변수의 값이 됩니다. 따라서 "bar"와 같은 열거된 요소와 공존할 수 없습니다.

의도된 동작이 슬라이스를 "폭발"하는 것이라면 다음 구문이 정확합니다.

foo([]string{"bar"}...)

이렇게 하면 됩니다. 효과적으로 확장:

foo("bar", "baz", "bla")

결론적으로, 가변 함수의 맥락에서 열거된 인수와 슬라이스를 혼합하는 것은 불가능합니다. 가다. 언어 사양에 따르면 가변 매개변수는 해당 매개변수의 값이 되는 단일 슬라이스 인수만 허용할 수 있습니다. 원하는 "폭발" 동작을 달성하려면 앞에 열거된 인수 없이 전체 슬라이스를 자체적으로 전달해야 합니다.

위 내용은 Go에서 정규 슬라이스 인수와 분해 슬라이스 인수를 모두 Variadic 함수에 올바르게 전달할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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