Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go中slice和append的几个问题_Go - Fatal编程技术网

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]