第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對于Go中缺少數(shù)組/切片協(xié)方差的任何明智解決方案?

對于Go中缺少數(shù)組/切片協(xié)方差的任何明智解決方案?

Go
紫衣仙女 2021-04-09 13:15:31
我剛剛遇到的問題是在以下情況下該怎么辦: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沒有泛型,也不允許使用集合協(xié)方差: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有想法嗎?
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗 獲得超7個贊

沒有任何一種,現(xiàn)在真的沒有辦法做到這一點

  1. 使您[]int[]float雙方都進入[]interface{}。

  2. 使printItems接受interface{}而不是[]interface{}使用反射,然后使用反射,類似于fmt包所做的事情。

兩種解決方案都不是很漂亮。


查看完整回答
反對 回復(fù) 2021-04-26
?
呼啦一陣風(fēng)

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,")

}


查看完整回答
反對 回復(fù) 2021-04-26
  • 3 回答
  • 0 關(guān)注
  • 245 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號