英文:
Fixed-size array that contains multiple specific types?
问题
我有一个数组(来自JSON),它始终包含一个字符串和一个整数,就像这样:["foo", 42]
目前,我必须使用[]interface{}
和断言arr[0].(string)
arr[1].(int)
。
我想知道是否有任何方法可以指定数组中期望的类型?我想象中的写法是 [...]{string,int}
谢谢。
英文:
I have an array (coming from JSON) that always contains a string and an int, like so: ["foo",42]
Right now, I have to use []interface{}
with assertions arr[0].(string)
arr[1].(int)
I'm wondering if there's any way to specify the types expected in the array? I'm picturing something like.. [...]{string,int}
Thanks.
答案1
得分: 1
首先,答案是否定的。但是你可以使用期望的类型从interface{}
中获取值。
以下是代码的翻译:
package main
import (
"encoding/json"
"fmt"
"github.com/mattn/go-scan"
"log"
)
func main() {
text := `["foo", 42]`
var v interface{}
err := json.Unmarshal([]byte(text), &v)
if err != nil {
log.Fatal(err)
}
var key string
var val int
e1, e2 := scan.ScanTree(v, "[0]", &key), scan.ScanTree(v, "[1]", &val)
if e1 != nil || e2 != nil {
log.Fatal(e1, e2)
}
fmt.Println(key, val)
}
希望对你有帮助!
英文:
At the first, answer is No. But you can get values from interface{}
with type you expected.
How about this?
package main
import (
"encoding/json"
"fmt"
"github.com/mattn/go-scan"
"log"
)
func main() {
text := `["foo", 42]`
var v interface{}
err := json.Unmarshal([]byte(text), &v)
if err != nil {
log.Fatal(err)
}
var key string
var val int
e1, e2 := scan.ScanTree(v, "[0]", &key), scan.ScanTree(v, "[1]", &val)
if e1 != nil || e2 != nil {
log.Fatal(e1, e2)
}
fmt.Println(key, val)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论