유형 스위치의 Fallthrough 금지:
Go에서 "fallthrough" 문은 다음 사례의 실행을 허용하는 언어 구성입니다. 명시적인 break 문이 없는 switch 문입니다. 그러나 유형 스위치에서는 fallthrough가 허용되지 않습니다.
왜 그럴까요?
유형 스위치는 표현식의 유형을 결정하고 이를 스위치 사례에 지정된 변수에 할당합니다. 이 변수는 스위치의 해당 지점에서 표현식의 특정 유형을 나타냅니다.
fallthrough가 허용되면 유형 불일치 문제가 발생합니다. 제공된 코드 조각을 고려해 보겠습니다.
//Empty interface var x interface{} //A int, float64, bool or string value x = ... switch i := x.(type) { case int: fmt.Println(i + 1) case float64: fmt.Println(i + 2.0) case bool: fallthrough case string: fmt.Printf("%v", i) default: fmt.Println("Unknown type. Sorry!") }
bool이 true인 경우 변수 i에는 인터페이스 x 내의 bool 값이 할당됩니다. fallthrough가 허용되면 문자열 케이스까지 실행이 계속됩니다. 그러나 그 시점에서 변수 i는 여전히 bool 값을 보유합니다. 이러한 유형 불일치로 인해 오류가 발생합니다.
또한 fallthrough 문은 변수 i의 유형을 변경할 수 없기 때문에 유형 스위치에서는 의미가 없습니다. 유형 스위치는 각 경우에 표현식 유형을 특정 유형으로 좁히기 위한 것입니다. fallthrough를 허용하면 이 목적이 무용지물이 됩니다.
원하는 동작을 달성하려면 아래와 같이 각 사례 내에서 명시적인 유형 변환이 포함된 switch 문을 사용할 수 있습니다.
switch i := x.(type) { case bool, string: if b, ok := i.(bool); ok { fmt.Println(b) // value as bool } else { fmt.Printf("%v", i) // value as string } default: fmt.Println("Unknown type. Sorry!") }
이 접근 방식을 사용하면 , fallthrough 없이도 단일 switch 문 내에서 다양한 유형을 처리할 수 있습니다.
위 내용은 Go의 유형 스위치에서 Fallthrough가 금지되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!