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