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

我写了下面的代码。但是我不能编译它。这是我的代码:


package main


import "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)),则效果很好。有谁能够帮我?


有只小跳蛙
浏览 229回答 1
1回答

三国纷争

附加并复制切片可变参数函数将零个或多个值x附加到类型S的s(该类型必须是切片类型),并返回结果切片,该类型也是S类型。如果s的容量不足以容纳其他值,则append分配一个新的足够大的切片,使其既适合现有slice元素又适合附加值。因此,返回的切片可以引用不同的基础数组。来电在函数调用中,函数值和参数按通常的顺序求值。在对它们进行评估之后,调用的参数将按值传递给函数,并且被调用函数开始执行。当函数返回时,该函数的返回参数按值传递回调用函数。在Go中,参数按值传递。您需要进行编写,res = append(res, functionx(i))以免丢弃res的新值,res引用的是不同的片,并可能引用了不同的基础数组。例如,package mainimport "fmt"func main() {&nbsp; &nbsp; res := []int{0, 1}&nbsp; &nbsp; fmt.Println(res)&nbsp; &nbsp; _ = append(res, 2) // discard&nbsp; &nbsp; fmt.Println(res)&nbsp; &nbsp; res = append(res, 2) // keep&nbsp; &nbsp; fmt.Println(res)}输出:[0 1][0 1][0 1 2]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go