for 루프 초기화 프로그램의 구조체: 복합 리터럴 모호성
Go에서 for 루프 초기화 프로그램에 구조체 표현식을 사용하면 구문 오류가 발생할 수 있습니다. 제대로 처리하지 않으면. 구조체에 대한 포인터는 제대로 작동하지만 로컬 구조체 변수를 선언하려면 특정 구문이 필요합니다.
문제를 설명하려면 다음 코드 조각을 고려하세요.
type Request struct { id int line []byte err error } 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)
여는 중괄호가 복합의 시작으로 해석될 수 있기 때문에 모호성이 발생합니다. 리터럴 또는 for 블록. 이 문제를 해결하려면 복합 리터럴 주위에 괄호를 사용하세요.
for r := (Request{}); r.err == nil; r.id++ { r.line, r.err = input.ReadSlice(0x0a) channel <- r }
이 구문은 구문 분석 중 모호성을 방지하면서 복합 리터럴을 명시적으로 선언합니다.
위 내용은 Go For 루프 초기화 프로그램에서 구조체를 사용하면 컴파일 타임 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!