>백엔드 개발 >Golang >Go 유형 스위치의 여러 사례로 인해 어떻게 예기치 않은 동작이 발생할 수 있습니까?

Go 유형 스위치의 여러 사례로 인해 어떻게 예기치 않은 동작이 발생할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-01 06:35:11920검색

How Can Multiple Cases in Go Type Switches Lead to Unexpected Behavior?

Go 유형 스위치의 다중 케이스

유형 전환 변수에 인터페이스 값을 할당할 때 결과 유형은 사례 목록에 따라 다릅니다. 구조. switch-case 문에 여러 케이스 목록이 있으면 예기치 않은 동작이 발생할 수 있습니다.

제공한 코드 조각에서:

switch a := foo.(type){
    case B, A:
        a.test()
}

변수 a의 유형이 인터페이스이기 때문에 오류가 발생합니다.{} , A 또는 B가 아닙니다. 이는 케이스 목록에 여러 유형이 포함되어 있어 a 유형이 인터페이스 표현식 유형과 동일하게 유지되기 때문입니다. (foo).

이 문제를 해결하려면 사례 목록에 단일 유형만 포함되어야 합니다.

switch a := foo.(type){
    case A:
        a.test()
}

사례 목록을 특정 유형으로 제한하면 변수 a가 예상되는 유형을 갖게 됩니다. 유형을 사용하면 메서드 호출이 성공할 수 있습니다.

또는 어설션을 사용하여 인터페이스 유형을 명시적으로 어설션할 수도 있습니다. 표현식:

if a, ok := foo.(tester); ok {
    fmt.Println("foo has test() method")
    a.test()
}

이 경우 변수 a는 어설션이 성공한 경우에만 예상되는 유형을 갖습니다(즉, ok가 true인 경우).

위 내용은 Go 유형 스위치의 여러 사례로 인해 어떻게 예기치 않은 동작이 발생할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.