아래는 질문이있는 Go 코드입니다. 구체적 a
으로이 기능 은 무엇 입니까?
func DPrintf(format string, a ...interface{}) (n int, err error) {
if Debug > 0 {
n, err = fmt.Printf(format, a...)
}
return
}
여기에 세 개의 점이 무엇인지 말해 줄 수 있습니까? 그리고 무엇을 ...interface{}
합니까?
답변
세 개의 점 (…)으로 시작하는 매개 변수 유형을 가변 매개 변수 라고합니다 . 즉, 어떤 숫자 나 인수도 해당 매개 변수에 전달할 수 있습니다 (와 마찬가지로 fmt.Printf()
). 함수는 매개 변수에 대해 선언 된 유형의 조각으로 매개 변수에 대한 인수 목록을받습니다 ( []interface{}
귀하의 경우). 이동 사양 상태 :
함수 시그니처의 마지막 매개 변수에는 … 접두사가 붙은 유형이있을 수 있습니다. 이러한 매개 변수가있는 함수를 가변이라고하며 해당 매개 변수에 대해 0 개 이상의 인수를 사용하여 호출 할 수 있습니다.
매개 변수 :
a ...interface{}
다음과 같은 기능의 경우입니다.
a []interface{}
차이점은 이러한 함수에 인수를 전달하는 방법입니다. 슬라이스의 각 요소를 개별적으로 제공하거나 단일 슬라이스로 제공하여 수행되며,이 경우 슬라이스 값에 세 개의 점을 붙여야합니다. 다음 예에서는 동일한 호출이 발생합니다.
fmt.Println("First", "Second", "Third")
다음과 같은 작업을 수행합니다.
s := []interface{}{"First", "Second", "Third"}
fmt.Println(s...)
이것은 Go 사양 에서도 잘 설명됩니다.
함수와 호출이 주어지면
func Greeting(prefix string, who ...string) Greeting("nobody") Greeting("hello:", "Joe", "Anna", "Eileen")
내
Greeting
,who
값 것이다nil
첫번째 통화를하고,[]string{"Joe", "Anna", "Eileen"}
두 번째이다.마지막 인수가 슬라이스 유형에 할당
[]T
될 수있는...T
경우 인수 뒤에 오는 경우 매개 변수 값으로 변경되지 않고 전달 될 수 있습니다...
. 이 경우 새 슬라이스가 생성되지 않습니다.슬라이스
s
와 호출이 주어지면s := []string{"James", "Jasmine"} Greeting("goodbye:", s...)
내
Greeting
,who
같은 값을 가질 것이다s
동일한 기본 배열한다.
답변
마찬가지로 지금까지와 같은 interface{}
용어는 빈 인터페이스입니다. 즉, Go의 모든 변수에 의해 구현 된 인터페이스입니다.
이것은 일종의 유사의이다 java.lang.Object
또는 System.Object
C #에서,하지만 언어의 모든 변수 형식의 대신에 포함됩니다. 따라서 모든 것을 메서드에 전달할 수 있습니다.