代码实现
package main
import (
"fmt"
)
func main() {
var data interface{} = map[string]interface{}{
"key1": "value1",
"key2": "value2",
}
result, ok := data.(map[string]interface{})
if!ok {
fmt.Println("类型断言失败")
return
}
target := make(map[string]string)
for k, v := range result {
str, ok := v.(string)
if!ok {
fmt.Printf("键 %s 的值类型断言失败\n", k)
continue
}
target[k] = str
}
fmt.Println(target)
}
注意事项
- 类型断言的合法性:首先要确保
interface{}
变量实际存储的类型就是 map[string]interface{}
,使用类型断言时要通过 ok
来判断断言是否成功,如 result, ok := data.(map[string]interface{})
,如果断言失败,程序不应继续执行后续依赖该断言结果的操作,避免运行时错误。
- 值类型的一致性:在将
map[string]interface{}
转换为 map[string]string
时,map[string]interface{}
中的每个值都必须是 string
类型。所以在遍历 map[string]interface{}
并赋值到 map[string]string
时,要对每个值进行类型断言,如 str, ok := v.(string)
,并处理断言失败的情况,否则可能会在运行时产生错误。