[string] golang에서 [] string과… string의 차이점은 무엇입니까?

Go 언어에서는

[]string 문자열 배열입니다.

...string매개 변수로 도 사용 합니다.

차이점은 무엇입니까?

기능 정의 :

func f(args ...string) {}

이 함수를 아래와 같이 호출 할 수 있습니까?

args := []string{"a", "b"}

f(args)



답변

[]string 문자열 배열입니다.

기술적으로는 기본 배열을 참조하는 슬라이스입니다.

...string매개 변수로 도 사용 합니다.

차이점은 무엇입니까?

구조와 관련하여 실제로는 없습니다. 두 구문의 결과 데이터 유형은 동일합니다.

...매개 변수 구문은 가변 매개 변수를합니다. 0 개 이상의 string인수를 허용 하고이를 슬라이스로 참조합니다.

호출과 관련 f하여 다음 구문을 사용하여 문자열 조각을 variadic 매개 변수에 전달할 수 있습니다.

func f(args ...string) {
    fmt.Println(len(args))
}


args := []string{"a", "b"}

f(args...)

이 구문은 리터럴 구문을 사용하여 빌드 된 슬라이스 또는 가변 매개 변수를 나타내는 슬라이스 (실제로 서로 차이가 없기 때문에)에 사용할 수 있습니다.

http://play.golang.org/p/QWmzgIWpF8


답변

둘 다 문자열 배열을 생성하지만 차이점은 호출 방법에 있습니다.

func f(args ...string) {

}
// Would be called like this:

f("foo","bar","baz");

이를 통해 가변 개수의 인수 (모두 동일한 유형)를 허용 할 수 있습니다.

이것의 좋은 예는 fmt.Print당신이 원하는만큼 적게 또는 많은 arugments를 받아 들일 수있는 친구들과입니다.


답변

원하는 것은 다음과 같습니다.

var args []string = []string{"A", "B", "C"}

func Sample(args ...string) {
    for _, arg := range args {
        fmt.Println(arg)
    }
}

func main() {
    Sample(args...)
}

플레이 : http://play.golang.org/p/N1ciDUKfG1


답변

함수 매개 변수를 단순화합니다. 다음은 예제입니다 ( https://play.golang.org/p/euMuy6IvaM ) : SampleEllipsis 메소드는 0부터 동일한 유형의 여러 매개 변수를 허용하지만 SampleArray 메소드에서는 선언 할 필수 인수 입니다.

package main

import "fmt"

func SampleEllipsis(args ...string) {
    fmt.Printf("Sample ellipsis : %+v\n",args)
}


func SampleArray(args []string) {
    fmt.Println("Sample array ")
    SampleEllipsis(args...)
}

func main() {
    // Method one
    SampleEllipsis([]string{"A", "B", "C"}...)
    // Method two
    SampleEllipsis("A", "B", "C")
    // Method three
    SampleEllipsis()

    // Simple array
    SampleArray([]string{"A", "B", "C"})

    // Simple array
    SampleArray([]string{})

}

반환 :

Sample ellipsis : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array
Sample ellipsis : [A B C]
Sample array
Sample ellipsis : []


답변