Golang中如何从[]interface{}提取值
Golang中如何从[]interface{}提取值 大家好,
我正在学习Go语言,需要一些帮助。
我有一个变量 transformedEmail,打印出来时看起来像这样:
fmt.Printf("debug: %T, %v", transformedEmail, transformedEmail)
输出: debug: []interface {}, [map[encoded_value:.YlGhCqAs@gmail.com] map[encoded_value:+61-442-291-954] map[encoded_value:9872-5721-5683-2126] map[encoded_value:830-726 79679125]]%
我想遍历它并获取每个 "encoded_value" 的值,我应该怎么做?
谢谢
我有
更多关于Golang中如何从[]interface{}提取值的实战教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢 @mje,这个方法有效!
更多关于Golang中如何从[]interface{}提取值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我尝试使用 transformedEmail[0],但遇到了以下错误:
invalid operation: cannot index transformedEmail (variable of type interface{})compilerNonIndexableOperand
你的 transformedEmail 必须被声明为 interface{} 类型。%T 告诉你它的动态类型是 []interface{}。使用类型断言来获取可以索引的切片变量。
transformedEmailSlice,ok := transformedEmail.([]interface{})
if !ok {
log.Fatalf("transformedEmail is not really a []interface{}")
}
for i, element := range transformedEmailSlice {
fmt.Printf("transformedEmail element %d: %T %v\n",i,element,element)
}
你可以使用类型断言和循环来提取这些值。下面是一个示例代码:
package main
import "fmt"
func main() {
// 假设这是你的数据
transformedEmail := []interface{}{
map[string]interface{}{"encoded_value": ".YlGhCqAs@gmail.com"},
map[string]interface{}{"encoded_value": "+61-442-291-954"},
map[string]interface{}{"encoded_value": "9872-5721-5683-2126"},
map[string]interface{}{"encoded_value": "830-726 79679125"},
}
// 遍历切片
for i, item := range transformedEmail {
// 类型断言为 map[string]interface{}
if m, ok := item.(map[string]interface{}); ok {
// 获取 encoded_value 的值
if value, exists := m["encoded_value"]; exists {
// 再次类型断言为字符串
if str, ok := value.(string); ok {
fmt.Printf("索引 %d: %s\n", i, str)
}
}
}
}
}
输出:
索引 0: .YlGhCqAs@gmail.com
索引 1: +61-442-291-954
索引 2: 9872-5721-5683-2126
索引 3: 830-726 79679125
如果你确定所有值都是字符串,可以简化代码:
for _, item := range transformedEmail {
if m, ok := item.(map[string]interface{}); ok {
fmt.Println(m["encoded_value"].(string))
}
}
或者使用更安全的带检查的类型断言:
for _, item := range transformedEmail {
if m, ok := item.(map[string]interface{}); ok {
if value, ok := m["encoded_value"].(string); ok {
fmt.Println(value)
}
}
}

