登录
首页 >  Golang >  Go问答

使用可变参数直接附加到切片与在 for 循环中单独添加时的变量类型区别

来源:stackoverflow

时间:2024-02-29 11:21:21 392浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《使用可变参数直接附加到切片与在 for 循环中单独添加时的变量类型区别》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

当尝试模仿 go lang 中的队列接口时,在 enque 方法中,我将可变参数直接附加到切片。但是,当在 deque 操作中检索时,类型断言给出了紧急错误。将可变参数直接附加到切片与单独添加它们有何不同?

type queue struct {
    queueitems []item
}

func (queue *queue) enque(items ...item) error {
    ...
    queue.queueitems = append(queue.queueitems, items)
    ...
}

....
queue.enque(200)
val := queue.deque()
otherval := val.(int)
.....

下面的 enque 代码运行良好

func (queue *Queue) Enque(items ...Item) error {
  ....
    for _, itemVal := range items {
        queue.queueItems = append(queue.queueItems, itemVal)
    }
  ....
}

解决方案


当您为函数定义可变参数形式参数时,当您在函数中使用实际参数时,其基础类型是您指定的任何类型的切片。在这种情况下,函数中使用 Enqueue 中的形式参数 items 时,解析为 []Item 的类型(Item 的切片)。

因此,当您编写 queue.queueItems =append(queue.queueItems, items) 时,您真正所说的是将整个项目切片作为单个元素附加到我的切片上。

您想要做的是将可变参数中的每个项目作为切片上的单独元素附加,您可以通过以下方式实现:queue.queueItems =append(queue.queueItems, items...)

好了,本文到此结束,带大家了解了《使用可变参数直接附加到切片与在 for 循环中单独添加时的变量类型区别》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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