如何在切片增长时自动将切片的新元素添加到函数参数

有没有办法自动执行此操作?


package main


import "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 之外,有没有办法自动添加它?


三国纷争
浏览 165回答 1
1回答

拉风的咖菲猫

请注意,如果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 this3this this2 this3 this4注意:在中创建新切片convert()不会使此解决方案变慢,因为显式传递值(如fmt.Println(b[0], b[1], b[2]))也会隐式创建切片。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go