我研究过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/