一尘不染

对于Go中缺乏数组/切片协方差的任何明智解决方案?

go

我刚刚面临的问题是在以下情况下该怎么办:

func printItems(header string, items []interface{}, fmtString string) {
  // ...
}

func main() {
  var iarr = []int{1, 2, 3}
  var farr = []float{1.0, 2.0, 3.0}
  printItems("Integer array:", iarr, "")
  printItems("Float array:", farr, "")
}

Go没有泛型,也不允许使用集合协方差:

prog.go:26: cannot use iarr (type []int) as type []interface { } in function argument      
prog.go:27: cannot use farr (type []float) as type []interface { } in function argument

有想法吗?


阅读 194

收藏
2020-07-02

共1个答案

一尘不染

没有任何一种,现在真的没有办法做到这一点

  1. 使您[]int[]float双方都进入[]interface{}
  2. 使printItems接受interface{}而不是[]interface{}使用,然后使用反射,类似于fmt包所做的事情。

两种解决方案都不是很漂亮。

2020-07-02