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

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

如何在切片增長時自動將切片的新元素添加到函數參數

如何在切片增長時自動將切片的新元素添加到函數參數

Go
三國紛爭 2023-03-21 10:39:28
有沒有辦法自動執行此操作?package mainimport "fmt"func main() {    var a []string    a = append(a, "this", "this2", "this3")    increaseArguments(a)    a = append(a, "this4")    increaseArguments(a)}func increaseArguments(b []string) {    // I want, when i add new element to slice i want this function act as this    // fmt.Println(b[0],b[1], b[2], b[3])    fmt.Println(b[0], b[1], b[2])}除了將 b[3] 作為參數添加到 fmt.Println 之外,有沒有辦法自動添加它?
查看完整描述

1 回答

?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

請注意,如果b是 type []any,您可以將其作為 的可變參數的值傳遞fmt.Println()

fmt.Println(b...)

但由于b是 type []string,你不能。

但是如果你變成b一個[]any切片,你可以。您可以使用此輔助函數來執行此操作:

func convert[T any](x []T) []any {

    r := make([]any, len(x))

    for i, v := range x {

        r[i] = v

    }

    return r

}

進而:


func increaseArguments(b []string) {

    fmt.Println(convert(b)...)

}

這將輸出(在Go Playground上嘗試):


this this2 this3

this this2 this3 this4

注意:在中創建新切片convert()不會使此解決方案變慢,因為顯式傳遞值(如fmt.Println(b[0], b[1], b[2]))也會隱式創建切片。


查看完整回答
反對 回復 2023-03-21
  • 1 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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