- 此问题在此处已有答案**:
(9个答案)
Cannot convert []string to []interface {}(7个答案)
Cannot use args (type []string) as type []interface {} [duplicate](1个答案)
slice of struct != slice of interface it implements?(6个答案)
4天前关闭。
我有两个类型AssetClips
和Videos
来实现接口调用timelineClip
,我想传递一个[]AssetClips
或者[]Videos
给一个函数,这个函数接受一个[]timelineClip
作为参数,但是编译器抱怨了,我不明白为什么,我最后做了一个for循环来把我的[]AssetClips
和[]Videos
转换成[]timelineClip
有必要吗?有没有更优雅的方法?
// myFunctionThatTakesASliceOfTimelineClips(assetClips) is not possible
// myFunctionThatTakesASliceOfTimelineClips(videos) is not possible
var timelineClips []timelineClip
for _, assetClip := range assetClips {
timelineClips = append(timelineClips, assetClip)
}
for _, video := range videos {
timelineClips = append(timelineClips, video)
}
myFunctionThatTakesASliceOfTimelineClips(timelineClips)
2条答案
按热度按时间z18hc3ub1#
这是必要的,而且这是一种优雅的方式。
这是必要的,因为传递接口切片的机制与传递结构体切片的机制不同。结构体切片的每个元素都是结构体本身的副本,而接口的元素是指向结构体示例及其类型的接口。
kg7wmglp2#
如果你想避免复制,你可以使用泛型。简而言之,你只需要改变
到
例如:
https://go.dev/play/p/FTj8rMYq9GF