구조체 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!