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 중국어 웹사이트의 기타 관련 기사를 참조하세요!