【问题标题】:Fixed-size array that contains multiple specific types?包含多种特定类型的固定大小数组?
【发布时间】:2015-01-23 11:02:07
【问题描述】:

我有一个数组(来自 JSON),它总是包含一个字符串和一个 int,如下所示:["foo",42]

现在,我必须使用 []interface{} 和断言 arr[0].(string) arr[1].(int)

我想知道是否有任何方法可以指定数组中预期的类型?我在想像.. [...]{string,int}

谢谢。

【问题讨论】:

  • 您可以添加运行时类型断言。 golang.org/ref/spec#Type_assertions。您正在使用第一种形式的类型断言,但您也可以检查断言是成功还是失败。另请参阅:stackoverflow.com/questions/28015753/…
  • 是的,这就是我目前正在做的事情。
  • 使用结构类型和附加的UnmarshalJSON 方法不是更好吗(以便它可以处理[]{} 的差异)?

标签: arrays go


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 2021-09-28
    • 2015-11-16
    • 2012-03-17
    • 2011-06-18
    • 2023-04-03
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多