go - 具有相似元素类型的 slice 之间的转换

标签 go

我研究过this post ,但我无法弄清楚如何在我的情况下使用它。
第一个包裹
我有一个这种类型的第一个包:

type Vertex struct {
    X, Y, Z float32
}
有一个像这样的 slice :
var V []Vertex
第二包
有第二个包,其 API 无法修改。在第二个包中,有这个功能:
func Compute(points []struct{X, Y, Z float32}) (err error) {
    // ...
    return
}
第一包调用第二包
在第一个包裹内,我打算调用第二个包裹。没有将所有字段从源复制到目标的循环:
err = secondpackage.Compute(V)
但我收到此错误:

Cannot use 'V' (type []Vertex) as type []struct {...}



没用
灵感来自 this post ,我尝试通过以下方式进行转换:
points := []struct {
    X, Y, Z float32
}(V)
err = secondpackage.Compute(points)
但我收到此错误:

Cannot convert expression of type '[]Vertex' to type '[]struct { X, Y, Z float32 }'

最佳答案

请注意,您正在尝试创建 slice :

points := []struct {
    X, Y, Z float32
}(V)
但是您并没有真正给出 slice 应该填写的值。为此,您应该使用 {V}而不是 (V) .
工作示例:
https://play.golang.org/p/yYaQM-mPPjB
package main

import (
    "fmt"
)

type Vertex struct {
    X, Y, Z float32
}

var V []Vertex

func Compute(points []struct{ X, Y, Z float32 }) (err error) {
    fmt.Printf("%v\n", points)
    return nil
}
func main() {
    v := Vertex{1, 2, 3}
    points := []struct {
        X, Y, Z float32
    }{v}
    Compute(points)
}
或者,您可以更明确:
points := []struct {
    X, Y, Z float32
}{{v.X, v.Y, v.Z}}

关于go - 具有相似元素类型的 slice 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62639608/

相关文章:

go - 如何在 Go 中将 int64 转换为 int?

reflection - 在 Go 中,reflect.SliceOf() 的反函数是什么?

xml - 嵌套的 XML/JSON 结构标记,定义结构的正确方法是什么?

go - 如何在 GO 中检查命令行参数

list - 在 Go 列表中按值删除元素

go - 第一次设置 go-swagger

go - 有没有办法附加两个 go interface{} 引用?

go - 在 golang 的 fork repo 中工作时测试如何工作?

Go 语言 : running routine on different process

go - 在 Golang 中将结构转换为映射的函数