Go에서 if 구조를 초기화 할 수 없습니다.

Anders Olsson :

컴파일되지 않는 다음 코드 조각을 발견했을 때 큰 놀라움을 금치 못했습니다.

aTime := time.Time{}
if defaultTime := time.Time{} ; aTime != defaultTime {}

컴파일러는 다음을 반환합니다.

type time. 시간은 표현식이 아닙니다.

defaultTime : = time. 시간 사용

정의되지 않은 값 : defaultTime

여기서 의도는 aTime 변수가 기본값으로 설정된 경우 테스트하는 입니다.

또한 구조체의 포인터를 가져 오면 컴파일되지 않습니다 ( defaultTime : = & time.Time {} ).

그러나 if 구문 외부에서 defaultTime을 초기화하거나 new () 내장을 사용하여 초기화하면 컴파일됩니다.

aTime := time.Time{}
if defaultTime := new(time.Time) ; aTime != *defaultTime {}

내가 모든 곳에서 읽은 내용에서 new (myStruct) & myStruct {} 와 완전히 동일해야합니다 .

인터페 레이션 할 때 defaultValue : = time.Time {}If 문 사양에 자세히 설명 된대로 SimpleStmt (특히 Assignment )로 한정됩니다 .

최선의 인터넷 검색 노력에도 불구하고이 행동에 대한 설명이 없습니다. 누군가가 내 머리를 멈출 수 있다면 감사 할 것입니다.

홉스 :

{(A)의 시작으로 인식 Block의 구문 분석을 종료한다 SimpleStmt. 그 결정에 투입 한 후, 컴파일러는 같은 것을 결심 SimpleStmt, aTime := time.Time유효 때문이 아닌 time.Time할당 할 수있는 값되지 않습니다. 그러나 파서가 {.

이 버전 new{문자를 포함하지 않기 때문에 작동하므로 이러한 방식으로 구문 분석기를 혼동 하지 않습니다 .

블록은 표현식 중간에서 합법적으로 시작할 수 없으므로 괄호로 묶어 리터럴 형식을 사용할 수도 있습니다.

if defaultTime := (time.Time{}); aTime != defaultTime {
    // ...
}

gofmt "예상 된 부울 표현식, 간단한 문을 찾았습니다 (복합 리터럴 주위에 괄호가 누락 되었습니까?)"라는 유용한 메시지가 표시되지만 이상하게도 go 컴파일러 자체는 그렇지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

이동: 구조체를 초기화할 수 없습니다.

포함 된 구조체를 초기화 할 수 없습니다.

소품에서 상태를 초기화 할 수 없습니다.

Firebase에서 FirebaseThreadManagers 오류를 초기화 할 수 없습니다.

Xcode Playgrounds에서 UICollectionView를 초기화 할 수 없습니다.

Quartz dot net에서 StdSchedulerFactory를 초기화 할 수 없습니다.

Google지도에서 Swift를 초기화 할 수 없습니다.

Swift 오류에서 구조체 초기화 : 일반 매개 변수를 유추 할 수 없습니다.

기본값으로 구조체를 초기화 할 수 없습니다.

구조체 내에서 구조체 배열을 초기화 할 수 없습니다.

C에서 구조체를 어떻게 초기화 할 수 있습니까?

Swift에서 사전으로 구조를 초기화 할 수 있습니까?

JQuery-DataTables-초기화 중에 on () 메서드를 할당 할 수 없습니다.

try / catch에서 정적 최종 변수를 초기화 할 수 없습니다.

Bot Framework 4.9에서 AzureBlobStorage 초기화를 수행 할 수 없습니다.

초기화 전에 draggable에서 메서드를 호출 할 수 없습니다.

구조체 배열을 초기화 할 수 없습니다.

Windows에서 Elastic Beanstack을 초기화 / 구성 할 수 없습니다.

내 원격 서버에서 저장소를 초기화 할 수 없습니다.

생성자없이 다른 객체 초기화 내에서 객체를 초기화 할 수 있습니까?

xgboost 예측 중 예외 : DMatrix에서 DMatrix를 초기화 할 수 없습니다.

Virtualbox에서 KDE 전원 관리를 초기화 할 수 없습니다.

Spring에서 Bean 클래스를 초기화 할 수 없습니다.

내 활동 내에서 Room DB를 초기화 할 수 없습니다.

우분투에서 Google Cloud SDK를 초기화 할 수 없습니다

올바른 디렉토리에서 Firebase를 초기화 할 수 없습니다.

Python 클래스에서 spark 개체를 초기화할 수 없습니다.

AngularJS에서 컨트롤러를 초기화 할 수 없습니다.

Samsung Android에서 키 저장소를 초기화 할 수 없습니다.