go - 将接口(interface)指针片转换为结构指针片的最有效方法是哪种?

标签 go

这个问题已经有了答案:
Type converting slices of interfaces
5答
最基本的问题是我得到了一个[]*interface{},我需要把它转换成[]*MyStruct
我在尝试这样的方法,但速度不快。在我的例子中,在示例代码中,lines片段包含映射,因此硬转换不起作用。

var lines []*interface{}
var results []*MyStruct
for _, s := range lines {
  if s != nil {
    someJson, err := json.Marshal(s)
    if err != nil {
      continue
    }
    v := MyStruct{}
    if err := json.Unmarshal(someJson, &v); err != nil {
      continue
    }
    results = append(results, &v)
  }
}

最佳答案

如果必须使用json,我看到的唯一优化是预先分配结果,这样append就不必在“每次调用”时都这样做(不太可能,依赖于实现,但往往不止一次)

results := make([]*MyStruct, 0, len(lines))

关于go - 将接口(interface)指针片转换为结构指针片的最有效方法是哪种? ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57834312/

相关文章:

postgresql - 更新并返回GORM

go - 开始-指向 bool * bool的指针的合理性是什么?

go - 使用 Dokku 部署 Revel (Golang)

csv - 去。处理巨大的 csv 文件

go - golang中的函数类型参数匹配

string - Constant block 中的原始字符串文字

go - 如何将两个 json 值解码到同一个变量中?

go - 了解 gometalinter 的警告 : conn can be io. Reader/io.Writer

golang 在两个 goroutine 之间同时传递结构

go - 将 go.rice 与 http.ServeFile() 一起使用