我写了下面的代码。但是我不能编译它。这是我的代码: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]
- 1 回答
- 0 关注
- 228 浏览
添加回答
举报
0/150
提交
取消