为了账号安全,请及时绑定邮箱和手机立即绑定

Go中关于`slice`和`append`的问题

Go中关于`slice`和`append`的问题

Go
有只小跳蛙 2021-04-27 13:26:00
我写了下面的代码。但是我不能编译它。这是我的代码:package mainimport "fmt"func main() {    tmp := make([]int, 10)    for i := 0; i < 10; i++ {        tmp[i] = i    }    res := mapx(foo, tmp)    fmt.Printf("%v\n", res)}func foo(a int) int {    return a + 10}func mapx(functionx func(int) int, list []int) (res []int) {    res = make([]int, 10)    for _, i := range(list) {        append(res, functionx(i))    }    return}同时错误消息也很混乱: prog.go:21: append(res, functionx(i)) not used但是,如果我将替换append(res, functionx(i))(第21行)res = append(res, functionx(i)),则效果很好。有谁能够帮我?
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

附加并复制切片

可变参数函数将零个或多个值x附加到类型S的s(该类型必须是切片类型),并返回结果切片,该类型也是S类型。

如果s的容量不足以容纳其他值,则append分配一个新的足够大的切片,使其既适合现有slice元素又适合附加值。因此,返回的切片可以引用不同的基础数组。

来电

在函数调用中,函数值和参数按通常的顺序求值。在对它们进行评估之后,调用的参数将按值传递给函数,并且被调用函数开始执行。当函数返回时,该函数的返回参数按值传递回调用函数。

在Go中,参数按值传递。

您需要进行编写,res = append(res, functionx(i))以免丢弃res的新值,res引用的是不同的片,并可能引用了不同的基础数组。

例如,


package main


import "fmt"


func main() {

    res := []int{0, 1}

    fmt.Println(res)

    _ = append(res, 2) // discard

    fmt.Println(res)

    res = append(res, 2) // keep

    fmt.Println(res)

}

输出:


[0 1]

[0 1]

[0 1 2]


查看完整回答
反对 回复 2021-05-10
  • 1 回答
  • 0 关注
  • 228 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信