【发布时间】:2020-06-29 22:06:38
【问题描述】:
我研究过this post,但我不知道如何在我的情况下使用它。
第一个包
我有第一个这种类型的包裹:
type Vertex struct {
X, Y, Z float32
}
有一个像这样的切片:
var V []Vertex
第二包
第二个包的 API 无法修改。在第二个包中,有这个功能:
func Compute(points []struct{X, Y, Z float32}) (err error) {
// ...
return
}
第一个包调用第二个包
在第一个包裹内,我打算调用第二个包裹。没有将所有字段从源复制到目标的循环:
err = secondpackage.Compute(V)
但我收到此错误:
不能使用“V”(类型 []Vertex)作为类型 []struct {...}
没用
受到this post的启发,我尝试通过以下方式转换:
points := []struct {
X, Y, Z float32
}(V)
err = secondpackage.Compute(points)
但我收到此错误:
无法将'[]Vertex'类型的表达式转换为'[]struct { X, Y, Z float32 }'类型
【问题讨论】:
-
那么,隐藏切片的最快方法是什么?
-
写一个for循环并显式转换每个切片元素。
-
最快的方式是
func convert(vs []Vertex) []struct { X, Y, Z float32 }{ return nil },但这可能不是最正确的方式。实际上只有一种方法:写一个循环。 -
here
... but you can't change the name (and method set) of elements of a composite type ...我很想知道为什么?是因为哲学限制吗?是因为方法限制吗?
标签: go