我写了以下代码.但我不能编译.这是我的代码:
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
}
Run Code Online (Sandbox Code Playgroud)
同时错误消息也很混乱:
prog.go:21: append(res, functionx(i)) not used
但如果我替换append(res, functionx(i))
(第21行)res = append(res, functionx(i))
,它的效果非常好.有谁能够帮我?
谢谢!
pet*_*rSO 30
可变参数函数append将零或多个值x附加到类型S的s,它必须是切片类型,并返回结果切片,也是类型S的切片.
如果s的容量不足以容纳附加值,则append会分配一个足够大的新切片,该切片适合现有切片元素和其他值.因此,返回的切片可以指代不同的底层阵列.
在函数调用中,函数值和参数按通常顺序计算.在评估它们之后,调用的参数通过值传递给函数,并且被调用的函数开始执行.当函数返回时,函数的返回参数通过值传递回调用函数.
在Go中,参数按值传递.
您需要编写,res = append(res, functionx(i))
以便不丢弃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)
}
Run Code Online (Sandbox Code Playgroud)
输出:
[0 1]
[0 1]
[0 1 2]
Run Code Online (Sandbox Code Playgroud)