>  기사  >  백엔드 개발  >  Go 언어의 유형 주장이란 무엇입니까?

Go 언어의 유형 주장이란 무엇입니까?

王林
王林원래의
2023-06-11 08:56:321678검색

Go 언어는 정적으로 유형이 지정된 프로그래밍 언어입니다. 유형 어설션(Type Assertion)은 프로그램의 인터페이스 변수에 저장된 특정 값 유형을 결정하는 방법 중 하나입니다. Go 언어에서 인터페이스 변수는 모든 유형의 값을 저장할 수 있지만, 인터페이스 변수에 저장되는 유형 정보는 제한되어 있으며 인터페이스 변수에 대해 모든 유형의 연산을 수행할 수는 없습니다. 따라서 실제 응용에서는 인터페이스 변수에 저장된 특정 값 유형을 판단하고 변환해야 합니다. 이것이 유형 주장이 하는 일입니다.

Go 언어의 유형 어설션은 값 유형 어설션과 포인터 유형 어설션의 두 가지 형식으로 제공됩니다. 값 유형 주장과 포인터 유형 주장은 인터페이스 변수의 값 유형을 판단하고 변환하는 방법이 약간 다릅니다.

값 유형 주장:

값 유형 주장의 구문 형식은 다음과 같습니다.

x.(T)

여기서 x는 인터페이스 유형의 변수이고 T는 특정 유형을 나타냅니다. 이 유형 주장은 x가 T 유형의 값을 저장하면 true이고, 그렇지 않으면 false입니다.

유형 주장의 결과에는 두 개의 값이 있습니다. 첫 번째 값은 x가 유형 T로 변환된 후의 값입니다. 두 번째 값은 이 유형 주장의 결과가 true인지 여부를 나타내는 부울 값입니다. 구체적인 코드 구현은 다음과 같습니다.

var x interface{}
x = "hello"

s, ok := x.(string)
if ok {
    fmt.Printf("x 类型为 string,值为 %s。
", s)
} else {
    fmt.Printf("x 不是 string 类型。
")
}

위 코드에서는 빈 인터페이스 유형 변수 x가 먼저 정의되고 변수 x에 "hello"라는 문자열이 할당됩니다. 값 유형 주장문 x.(string)은 변수 x를 문자열 유형으로 변환하려고 시도하고, s는 변환된 문자열을 나타내고, ok는 유형 주장이 성공했는지 여부를 나타냅니다. ok가 true이면 x에 저장된 값 유형이 문자열 유형이고 변환된 문자열 s를 출력할 수 있음을 의미합니다. ok가 false인 경우 x는 문자열 유형이 아니며 해당 프롬프트 정보가 출력될 수 있음을 의미합니다.

포인터 유형 어설션:

포인터 유형 어설션의 구문 형식은 어설션할 때 포인터를 조작해야 한다는 점을 제외하면 값 유형 어설션의 구문 형식과 유사합니다.

x.(*T)

여기서 *T는 T 유형의 포인터 유형을 나타냅니다. 이 유형 주장은 x에 저장된 값이 포인터 유형 T이면 참이고, 그렇지 않으면 거짓입니다.

값 유형 어설션과 마찬가지로 포인터 유형 어설션에도 두 개의 값이 있습니다. 첫 번째 값은 x가 T 유형 포인터로 변환된 후의 값이며, 이 유형 어설션의 결과가 참인지 여부를 나타내는 부울 값입니다. . 구체적인 코드 구현은 다음과 같습니다.

type Foo struct {
    bar string
}

func main() {
    var i interface{} = &Foo{"hello"}

    f, ok := i.(*Foo)
    if ok {
        fmt.Printf("i 是指针类型,指向 Foo 类型的变量,f.bar 的值为 %s。
", f.bar)
    } else {
        fmt.Printf("类型断言失败。
")
    }
}

위 코드에서는 Foo 유형의 구조가 정의되고, 메인 함수에 빈 인터페이스 변수 i가 정의되며, Foo 유형의 구조에 대한 포인터가 변수에 할당됩니다. 나. 포인터 유형 주장 x.(*Foo)는 변수 x를 Foo 유형의 구조를 가리키는 포인터 유형으로 변환하려고 시도하고, f는 변환된 포인터를 나타내고, ok는 유형 주장이 성공했는지 여부를 나타냅니다. ok가 true이면 x에 저장된 값 유형이 Foo 유형 구조체를 가리키는 포인터 유형이고 포인터가 가리키는 구조의 필드 값을 출력할 수 있음을 의미합니다. ok가 false인 경우 x는 Foo 유형 구조를 가리키는 포인터 유형이 아니며 해당 프롬프트 정보가 출력될 수 있음을 의미합니다.

요약:

유형 어설션은 Go 언어에서 인터페이스 변수를 작동하는 데 일반적으로 사용되는 방법입니다. 유형 어설션은 인터페이스 변수에 저장된 유형을 결정한 다음 해당 작업을 수행할 수 있습니다. Go 언어에는 값 유형 주장과 포인터 유형 주장이라는 두 가지 형식의 유형 주장이 있습니다. 유형 주장을 사용할 때 런타임 오류를 방지하려면 오류 처리에 주의해야 합니다.

위 내용은 Go 언어의 유형 주장이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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