GO 类型断言
时间: 2023-09-06 08:08:43 浏览: 47
在 Go 中,类型断言是一种用于检查接口值的实际类型的机制。它可以将接口值转换为其基础类型或其它接口类型。类型断言语法如下:
```
value, ok := interfaceVar.(Type)
```
其中,interfaceVar 是一个接口变量,Type 是一个类型。如果接口变量 interfaceVar 的实际类型与 Type 相同,则 value 将是一个具有该类型的变量,并且 ok 的值为 true。否则,value 的值将是该类型的零值,并且 ok 的值为 false。
例如,假设我们有一个接口变量 var1,它的实际类型是 int。我们可以使用类型断言将其转换为 int 类型并将其存储在一个新的变量中,如下所示:
```
var1 := 10
value, ok := var1.(int)
if ok {
fmt.Printf("value is %d\n", value) // 输出:value is 10
}
```
如果我们尝试将接口变量 var1 转换为 string 类型,由于实际类型与 string 类型不匹配,因此 ok 的值将为 false,value 的值将是 string 类型的零值 "",如下所示:
```
var1 := 10
value, ok := var1.(string)
if ok {
fmt.Printf("value is %s\n", value)
} else {
fmt.Println("value is not a string")
}
```
相关问题
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 中,类型断言用于检查接口值的底层具体类型。它的语法如下:
```
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` 的值将会是 `""`。
阅读全文