golang switch 断言
时间: 2024-03-05 10:46:49 浏览: 120
在Go语言中,switch语句可以用于进行条件判断和多路分支。而在使用switch语句时,我们可以使用断言(type assertion)来判断某个接口变量的具体类型。
断言的语法形式为:value.(type),其中value是一个接口类型的变量,type是具体的类型。在switch语句中,我们可以使用这种形式来判断接口变量的类型,并执行相应的代码块。
下面是一个示例代码,演示了如何在switch语句中使用断言:
```
func main() {
var i interface{} = 10
switch v := i.(type) {
case int:
fmt.Println("i 是一个整数", v)
case string:
fmt.Println("i 是一个字符串", v)
default:
fmt.Println("i 的类型未知")
}
}
```
在上面的代码中,我们定义了一个空接口变量i,并将其赋值为整数10。然后,在switch语句中使用断言来判断i的具体类型。如果i是int类型,则执行第一个case语句;如果i是string类型,则执行第二个case语句;如果i的类型未知,则执行default语句。
相关问题
golang json遍历
遍历 JSON 可以使用 Go 语言内置的 encoding/json 包。
假设有以下 JSON 数据:
```json
{
"name": "John",
"age": 30,
"email": "john@example.com",
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY",
"zip": "10001"
},
"phoneNumbers": [
{
"type": "home",
"number": "555-1234"
},
{
"type": "work",
"number": "555-5678"
}
]
}
```
可以使用以下代码遍历该 JSON:
```go
package main
import (
"encoding/json"
"fmt"
)
func main() {
jsonData := `{
"name": "John",
"age": 30,
"email": "john@example.com",
"address": {
"street": "123 Main St",
"city": "New York",
"state": "NY",
"zip": "10001"
},
"phoneNumbers": [
{
"type": "home",
"number": "555-1234"
},
{
"type": "work",
"number": "555-5678"
}
]
}`
var result map[string]interface{}
err := json.Unmarshal([]byte(jsonData), &result)
if err != nil {
fmt.Println("error:", err)
}
for key, value := range result {
switch valueType := value.(type) {
case string:
fmt.Println(key, "is string:", valueType)
case float64:
fmt.Println(key, "is float64:", valueType)
case map[string]interface{}:
fmt.Println(key, "is an object:")
for subKey, subValue := range valueType {
fmt.Println(subKey, ":", subValue)
}
case []interface{}:
fmt.Println(key, "is an array:")
for i, arrValue := range valueType {
fmt.Println(i, ":", arrValue)
}
default:
fmt.Println(key, "is of a different type")
}
}
}
```
输出结果为:
```
name is string: John
age is float64: 30
email is string: john@example.com
address is an object:
street : 123 Main St
city : New York
state : NY
zip : 10001
phoneNumbers is an array:
0 : map[number:555-1234 type:home]
1 : map[number:555-5678 type:work]
```
可以看到,遍历 JSON 数据需要使用类型断言,判断当前值的类型,并根据类型进行相应操作。
阅读全文