>백엔드 개발 >Golang >For 루프에서 구조체를 초기화할 때 Go에서 오류가 발생하는 이유는 무엇입니까?

For 루프에서 구조체를 초기화할 때 Go에서 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-31 17:48:09398검색

Why Does Go Throw an Error When Initializing a Struct in a For Loop?

For 루프 초기화 프로그램의 구조체와 혼동

Go에서는 for 루프에서 구조체를 초기화할 때 구문 오류가 발생합니다. 구조체에 대한 포인터를 사용하면 문제가 없지만 지역 변수가 필요한 경우가 있습니다. 이 문서에서는 문제를 자세히 살펴보고 해결책을 제공합니다.

문제가 있는 코드 조각:

for r := Request{}; r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

코드를 단순화하면 다음을 얻을 수 있습니다.

for r := Request{}; r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

이 코드 결과는 다음과 같습니다. 다음 오류:

expected boolean or range expression, found simple statement (missing parentheses around composite literal?) (and 1 more errors)

이 오류는 구문 분석의 모호함에서 비롯됩니다. 여는 중괄호('{')입니다. 복합 리터럴의 일부이거나 for 블록의 시작일 수 있습니다.

이 모호성을 해결하기 위해 복합 리터럴 주위에 괄호를 추가합니다.

for r := (Request{}); r.err == nil; r.id++ {
    r.line, r.err = input.ReadSlice(0x0a)
    channel <- r
}

구조체 초기화를 포함하여 괄호 안에는 이것이 for 루프 구문의 일부가 아닌 복합 리터럴임을 명시적으로 나타냅니다.

위 내용은 For 루프에서 구조체를 초기화할 때 Go에서 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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