>백엔드 개발 >Golang >구조체 이니셜라이저가 있는 Go 'for' 루프가 구문 오류를 일으키는 이유는 무엇입니까?

구조체 이니셜라이저가 있는 Go 'for' 루프가 구문 오류를 일으키는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-24 01:34:10976검색

Why Does a Go `for` Loop with a Struct Initializer Cause a Syntax Error?

구조체 for 루프 초기화 구문 오류

Go 프로그램에서 for 루프의 초기화 프로그램으로 구조체 표현식을 사용하면 다음과 같은 결과가 발생할 수 있습니다. 컴파일 타임에 구문 오류가 발생했습니다. 이 오류는 구조체 표현식의 여는 중괄호가 for 루프 블록의 시작으로 모호하게 해석될 때 발생합니다.

다음 코드 예제를 고려하세요.

type Request struct {
    id   int
    line []byte
    err  error
}

func main() {
    go func() {
        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)

이 모호성을 해결하려면 구조체 표현식이 복합 리터럴임을 명시적으로 지정할 수 있습니다. 괄호로 묶어야 합니다.

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

이렇게 수정하면 코드가 성공적으로 컴파일됩니다. 괄호는 여는 중괄호가 for 루프 자체가 아니라 복합 리터럴의 일부임을 분명히 나타냅니다.

위 내용은 구조체 이니셜라이저가 있는 Go 'for' 루프가 구문 오류를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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