亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

你如何傳遞一片 *interface{} 作為參數?

你如何傳遞一片 *interface{} 作為參數?

Go
茅侃侃 2023-05-15 14:46:19
Scan()我想在 package 中使用sql,但列數以及參數的數量將在運行時發生變化。這是以下人的簽名Scan():func (rs *Rows) Scan(dest ...interface{}) error根據文檔,*interface{}是Scan(). 所以我想創建一個片段[]*interface{}并將其擴展為參數。這是我認為可行的方法:func query(database *sql.DB) {    rows, _ := database.Query("select * from testTable")    for rows.Next() {        data := make([]*interface{}, 2)        err := rows.Scan(data...) // Compilation error        fmt.Printf("%v%v\n", *data[0], *data[1])        if err != nil {            fmt.Println(err.Error())        }    }}編譯失敗cannot use data (type []*interface {}) as type []interface {} in argument to rows.Scan。我以為那data...會擴展到&data[0], &data[1],但顯然不是。我不明白錯誤信息。*interface{}與 兼容interface{},那么為什么我不能將指針切片擴展到接口類型?這有效:func query(database *sql.DB) {    rows, _ := database.Query("select * from testTable")    for rows.Next() {        data := make([]*interface{}, 2)        err := rows.Scan(&data[0], &data[1]) // Only changed this line        fmt.Printf("%v%v\n", *data[0], *data[1]) // Outputs "[48][116 101 120 116]"        if err != nil {            fmt.Println(err.Error())        }    }}但是我不能使用它,因為列數在編譯時是未知的。我該如何編寫這段代碼,以便我可以將可變數量的傳遞*interface{}給rows.Scan()?
查看完整描述

2 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

首先,您不能使用[]*interface{}指針切片來接口,而不是[]interface{}接口是指針的地方。[]*interface{}不同于[]interface{}. 只需創建一片接口,其中每個元素都是指向具體類型的指針。


這是您將如何執行此操作的片段。


var x int

var s string


data := []interface{}{&x, &s}


rows.Scan(data...)

關于使用...擴展運算符的注意事項。


查看完整回答
反對 回復 2023-05-15
?
紅糖糍粑

TA貢獻1815條經驗 獲得超6個贊

如果你真的想傳遞 a []*interface{}(也許你不知道輸出的具體類型),你必須首先將每個包裝*interface{}在 a 中interface{}:


values := make([]interface{}, columnsCount)

for i := range values {

    values[i] = new(interface{})

}

傳遞給...interface{}參數的單個值會自動包裝在 a 中interface{},但就像[]int...不會滿足一樣...interface{},也不會[]*interface{}...。


查看完整回答
反對 回復 2023-05-15
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號