[variables] Go 선언에서“_,”(밑줄 쉼표)는 무엇입니까?

그리고 나는 이런 종류의 변수 선언을 이해하지 못하는 것 같습니다.

_, prs := m["example"]

_,” 이 (가) 정확히 무엇을 하고 있으며 왜 대신 이와 같은 변수를 선언 했습니까?

prs := m["example"]

( Go by Example : Maps의 일부로 찾았습니다 . )



답변

반환 값에 대한 모든 변수를 선언 할 필요가 없습니다.
이를 공백 식별자 라고합니다 .

에서와 같이 :

_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate

( 다른 ‘ _‘사용 사례는 가져 오기를위한 것입니다. )

반환 값을 버리기 때문에 “에서와 같이 반환 값 중 하나만 확인하고 싶을 때 유용합니다.Effective Go, map “에 표시된 ” 맵에서 키 존재를 테스트하는 방법 .

_, present := timeZone[tz]

실제 값에 대해 걱정하지 않고지도에 존재하는지 테스트하려면 빈 식별자 인 간단한 밑줄 ( _)을 사용할 수 있습니다 .
공백 식별자는 모든 유형의 값으로 할당하거나 선언 할 수 있으며 값은 무해하게 버립니다.
맵에서 존재 여부를 테스트하려면 값에 대한 일반적인 변수 대신 빈 식별자를 사용합니다.

같이 Jsor는 추가 의견에 :

“일반적으로 허용되는 표준”은 멤버십 테스트 변수 “ok”를 호출하는 것입니다 (채널 읽기가 유효한지 여부를 확인하는 것과 동일).

이를 통해 테스트와 결합 할 수 있습니다.

if _, err := os.Stat(path); os.IsNotExist(err) {
    fmt.Printf("%s does not exist\n", path)
}

루프에서도 찾을 수 있습니다.

범위 (값)에서 두 번째 항목 만 필요한 경우 빈 식별자 인 밑줄을 사용하여 첫 번째 항목을 삭제합니다.

sum := 0
for _, value := range array {
    sum += value
}


답변

Go 컴파일러는 절대 사용하지 않는 변수를 만들 수 없습니다.

for i, value := range x {
   total += value
}

위 코드는 “내가 선언했고 사용하지 않았습니다”라는 오류 메시지를 반환합니다.

루프 내에서 i를 사용하지 않기 때문에 다음과 같이 변경해야합니다.

for _, value := range x {
   total += value
}


답변

_빈 식별자입니다. 할당되어야하는 값이 폐기됨을 의미합니다.

여기에서 example버려지 는 키 값입니다 . 두 번째 코드 줄은 존재 부울을 버리고 값을에 저장합니다 prs.
따라서지도에서 존재 여부 만 확인하려면 값을 버릴 수 있습니다. 맵을 세트로 사용하는 데 사용할 수 있습니다.


답변

빈 식별자는 구문에 변수 이름이 필요할 때마다 사용할 수 있지만 프로그램 논리는 그렇지 않습니다. 예를 들어 요소 값만 필요할 때 원치 않는 루프 인덱스를 버립니다.

발췌 :

Go 프로그래밍 언어 (Addison-Wesley 전문 컴퓨팅 시리즈)

브라이언 더블유 케르 니간

이 자료는 저작권으로 보호 될 수 있습니다.


답변

빈 식별자라고하며 반환 될 값을 참조하지 않고 버리고 자하는 경우에 도움이됩니다.

우리가 그것을 사용하는 곳 :

  • 함수는 값을 반환하며 나중에 사용할 계획이 없습니다.
  • 반복을 원하고 사용하지 않을 i 값이 필요합니다.


답변

기본적으로 _,빈 식별자라고합니다. GO에서는 사용되지 않는 변수를 가질 수 없습니다.

value : = range 를 사용하는 경우 배열을 반복 할 때 인스턴스로 반복을 위해 i 값을 원하지 않습니다 . 그러나 i 값을 생략하면 오류가 반환됩니다. 그러나 i를 선언하고 사용하지 않으면 오류도 반환됩니다.

따라서 그것이 우리가 사용해야하는 곳 _,입니다.

또한 앞으로 함수의 반환 값을 원하지 않을 때 사용됩니다.


답변

사용하지 않는 변수의 가장 좋은 사용 사례는 부분 출력 만 필요한 상황입니다. 아래 예에서는 값 (주 인구) 만 인쇄하면됩니다.

package main
import (
    "fmt"
)
func main() {
          statePopulations := map[string]int{
          "California": 39250017,
          "Texas":      27862596,
          "Florida":    20612439,
          }
          for _, v := range statePopulations {
          fmt.Println(v)
    }
}