유형 스위치 대 일반 스위치 문
Go에서는 일반 스위치 문에서는 fallthrough가 허용되지만 유형 스위치에서는 허용되지 않습니다. Go 사양에서는 이러한 불일치의 이유를 명시적으로 설명하지 않지만 이는 두 구조의 근본적인 차이점에서 비롯됩니다.
일반 Switch 문:
정상적인 경우 switch 문에서 스위치 표현식은 특정 유형의 단일 상수 값으로 평가됩니다. 그런 다음 이 값은 Case 문의 상수와 비교됩니다. 스위치 표현식이 상수와 일치하면 해당 케이스 블록이 실행됩니다.
일반 스위치 문의 폴스루를 사용하면 스위치 표현식이 케이스 상수와 일치하는지 여부에 관계없이 다음 케이스 블록으로 실행이 계속됩니다. 이 동작은 연속된 사례 문이 관련 시나리오를 처리할 때 유용할 수 있습니다.
유형 스위치:
반면에 유형 스위치는 스위치 표현식을 인터페이스 값으로 평가합니다. . 그런 다음 인터페이스 값의 유형은 런타임에 동적으로 결정되고 Case 문에 지정된 유형과 비교됩니다. 일치 여부에 따라 해당하는 케이스 블록이 실행됩니다.
일반 스위치 문과 달리 유형 스위치에서는 일관되게 적용할 수 없기 때문에 fallthrough가 허용되지 않습니다. 그 이유는 스위치 유형의 스위치 표현식이 모든 유형의 인터페이스 값을 반환할 수 있기 때문입니다. fallthrough가 허용된 경우 스위치 표현식의 유형은 한 사례 블록에서 다음 사례 블록으로 전환될 때 변경됩니다.
예를 들어 다음 유형 스위치를 고려하세요.
switch i := x.(type) { case int: fmt.Println(i + 1) fallthrough // Error: cannot fallthrough in type switch case float64: fmt.Println(i + 2.0) }
여기서 코드에서 스위치 표현식 x가 정수이면 case int 블록이 실행됩니다. fallthrough가 허용되면 실행은 float64 블록 케이스까지 계속됩니다. 그러나 이 시점에서 스위치 표현식의 유형은 int에서 float64로 변경됩니다.
이렇게 하면 후속 Case 문에서 스위치 표현식이 float64가 될 것으로 예상하므로 유형 일관성이 손상됩니다. 일관성을 유지하기 위해 유형 스위치에서는 fallthrough가 허용되지 않습니다.
조건부 유형 처리를 위한 대체 접근 방식:
조건부 방식으로 여러 유형을 처리해야 하는 경우 다음이 있습니다. 유형 스위치에 대한 대체 접근 방식은 다음과 같습니다.
위 내용은 Go의 유형 스위치에서 fallthrough가 허용되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!