Go中slice和append的几个问题
我已经编写了以下代码。但我不能把它编译。这是我的密码:Go中slice和append的几个问题,go,Go,我已经编写了以下代码。但我不能把它编译。这是我的密码: 主程序包 输入“fmt” func main(){ tmp:=make([]整数,10) 对于i:=0;i
主程序包
输入“fmt”
func main(){
tmp:=make([]整数,10)
对于i:=0;i<10;i++{
tmp[i]=i
}
res:=mapx(foo,tmp)
fmt.Printf(“%v\n”,res)
}
func foo(a int)int{
返回+10
}
func mapx(functionx func(int)int,list[]int)(res[]int){
res=make([]整数,10)
对于u,i:=范围(列表){
附加(res,functionx(i))
}
返回
}
同时,错误信息也非常混乱:
prog.go:21:append(res,functionx(i))未使用
但是如果我将append(res,functionx(I))
(第21行)替换为res=append(res,functionx(I))
,那么它工作得非常好。有人能帮我吗
谢谢大家!
变量函数append将零个或多个值x附加到
类型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)
}
输出:
[0 1]
[0 1]
[0 1 2]