3 回答

TA貢獻(xiàn)1862條經(jīng)驗 獲得超7個贊
沒有任何一種,現(xiàn)在真的沒有辦法做到這一點
使您
[]int
和[]float
雙方都進入[]interface{}
。使printItems接受
interface{}
而不是[]interface{}
使用反射,然后使用反射,類似于fmt包所做的事情。
兩種解決方案都不是很漂亮。

TA貢獻(xiàn)1802條經(jīng)驗 獲得超6個贊
使用反射的示例:
package main
import (
"fmt"
"reflect"
"strings"
"container/vector"
)
func printItems(header string, items interface{}, fmtString string) {
value, ok := reflect.NewValue(items).(reflect.ArrayOrSliceValue)
if !ok {
panic("Not an array or slice")
}
stringBuilder := new(vector.StringVector)
stringBuilder.Push(header)
n := value.Len()
for i := 0; i < n; i++ {
stringBuilder.Push(fmt.Sprintf(fmtString, value.Elem(i).Interface()))
}
fmt.Println(strings.Join(*stringBuilder, ""))
}
func main() {
var iarr = []int{1, 2, 3}
var farr = []float{1.0, 2.0, 3.0}
printItems("Integer array:", iarr, " %d,")
printItems("Float array:", farr, " %.1f,")
}
- 3 回答
- 0 關(guān)注
- 245 瀏覽
添加回答
舉報