登录
首页 >  Golang >  Go问答

自动将新元素添加到函数参数的方法随着切片的增长

来源:stackoverflow

时间:2024-02-08 17:18:22 413浏览 收藏

哈喽!大家好,很高兴又见面了,我是golang学习网的一名作者,今天由我给大家带来一篇《自动将新元素添加到函数参数的方法随着切片的增长》,本文主要会讲到等等知识点,希望大家一起学习进步,也欢迎大家关注、点赞、收藏、转发! 下面就一起来看看吧!

问题内容

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

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 的参数?


正确答案


请注意,如果 b 的类型为 []any,您可以将其作为 fmt.println():

fmt.println(b...)

但是由于 b 的类型是 []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]) )隐式创建一个切片。

查看相关问题:如何传递多个返回值可变参数函数的值?

终于介绍完啦!小伙伴们,这篇关于《自动将新元素添加到函数参数的方法随着切片的增长》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>