Go 类型断言
时间: 2023-09-06 08:07:37 浏览: 28
在 Go 中,类型断言用于检查接口值的底层具体类型。它的语法如下:
```
value, ok := interfaceVar.(typeName)
```
其中,`interfaceVar` 是一个接口类型的变量,`typeName` 是一个具体的类型。如果 `interfaceVar` 底层的具体类型是 `typeName`,那么 `value` 将会是 `interfaceVar` 的值,`ok` 的值为 `true`。否则,`value` 的值为 `typeName` 的零值,`ok` 的值为 `false`。
例如:
```
var i interface{} = "hello"
s, ok := i.(string)
if ok {
fmt.Println(s)
} else {
fmt.Println("i is not a string")
}
```
在这个例子中,`i` 是一个空接口变量,其底层类型为 `string`。因此,类型断言 `i.(string)` 会成功,并将 `s` 赋值为 `"hello"`,`ok` 的值为 `true`。如果 `i` 的底层类型不是 `string`,那么 `ok` 的值会为 `false`,`s` 的值将会是 `""`。
相关问题
golang类型断言
在 Golang 中,类型断言用于检查接口值的底层具体类型。类型断言的语法如下:
```
value, ok := interfaceVar.(typeName)
```
其中,`interfaceVar` 为接口类型的变量,`typeName` 为底层具体类型的名称。如果 `interfaceVar` 的底层类型是 `typeName`,则断言成功,返回 `value` 和 `true`;否则返回 `value` 的零值和 `false`。在类型断言中,通常使用 `if` 语句进行判断,例如:
```
if str, ok := var1.(string); ok {
// var1 的底层类型是 string
fmt.Println(str)
} else {
// var1 不是 string 类型
fmt.Println("var1 is not a string")
}
```
如果 `var1` 的底层类型是 string,则输出 `var1` 的值;否则输出错误信息。
GO 类型断言
在 Go 中,类型断言是一种检查接口值底层具体值类型的机制。它的语法形式为:`x.(T)`,其中 `x` 是一个接口类型的表达式,`T` 是一个类型。如果 `x` 的底层值是类型 `T`,那么类型断言的结果是一个值为 `x` 底层值且类型为 `T` 的新接口值;否则,类型断言会触发一个运行时错误。
例如:
```
var i interface{} = "hello"
s, ok := i.(string) // 类型断言成功,s 的值为 "hello",ok 的值为 true
f, ok := i.(float64) // 类型断言失败,f 的值为 0,ok 的值为 false
```
需要注意的是,类型断言只能用于接口类型的值,如果你尝试对非接口类型的值进行类型断言,编译器会报错。此外,类型断言可能会触发运行时错误,因此在使用之前最好先使用类型断言的结果的第二个返回值来判断类型断言是否成功。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)