유형 스위치의 Fallthrough: 허용되지 않는 이유
Go의 유형 스위치 문에서는 "fallthrough" 키워드가 금지됩니다. 공식 문서에서는 자세한 설명을 제공하지 않고 이 제한 사항을 간략하게 설명합니다. 이 문서의 목적은 이러한 제약의 잠재적인 이유를 조사하는 것입니다.
문제 이해
유형 스위치에서 각 Case 문은 유형 인터페이스의 표현식을 평가합니다.{} 특정 유형으로. 그런 다음 표현식의 값은 케이스 블록 내에서 사용하기 위해 지정된 유형에 바인딩됩니다. 그러나 fallthrough는 각 사례와 관련된 다양한 유형으로 인해 혼란을 초래할 수 있습니다.
다음 예를 고려하세요.
var x interface{} x = bool(true) switch i := x.(type) { case int: fmt.Println(i + 1) // Error: cannot use bool as int case float64: fmt.Println(i + 2.0) // Error: cannot use bool as float64 case bool: fallthrough case string: fmt.Printf("%v", i) // Error: cannot use bool as string }
이 시나리오에서 변수 i는 상황에 따라 다른 유형을 갖습니다. 어떤 경우에 직면하게 되는지. Fallthrough를 사용하면 후속 Case 문은 이전 Case와 동일한 유형의 변수를 예상합니다. 그러나 이전 사례가 bool이고 fallthrough가 사용된 경우 후속 사례에서 유형 문자열 값이 발생하여 유형 불일치 오류가 발생합니다.
가능한 이유
대체 접근 방식
개발자가 유형 스위치에 fallthrough를 사용하는 경우 유사한 결과를 얻기 위한 대체 접근 방식이 있습니다.
switch i := x.(type) { case int, float64: fmt.Println(i) }
switch i := x.(type) { case bool: if i { fmt.Println("True") } }
위 내용은 Go의 유형 스위치 문에서 fallthrough가 허용되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!