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 为什么在这个附加函数调用中需要三个点?_Go - Fatal编程技术网

Go 为什么在这个附加函数调用中需要三个点?

Go 为什么在这个附加函数调用中需要三个点?,go,Go,我正在按照教程学习Go中的RESTAPI。这是一段代码 func removeBook(w http.ResponseWriter, r *http.Request) { params := mux.Vars(r) id, _ := strconv.Atoi(params["id"]) for i, item := range books { if item.ID == id { books = append(

我正在按照教程学习Go中的RESTAPI。这是一段代码

func removeBook(w http.ResponseWriter, r *http.Request) {
    params := mux.Vars(r)
    id, _ := strconv.Atoi(params["id"])

    for i, item := range books {
        if item.ID == id {
            books = append(books[:i], books[i+1:]...)
        }
    }
}
特别是这一部分
books=append(books[:i],books[i+1:]…)

好的,
append
将一个或多个项目追加到一个切片(在本例中,追加到
books
,它是
book
结构的切片)
books[:i]
获取从开始到
i
的所有内容,不包括
i
。然后
i+1
表示
i
之后的下一项,在右侧添加冒号表示从那里到结尾的所有内容。因此,这意味着我们将获得所有项目,直到
i
,不包括
i
,然后是
i
之后的所有项目。这意味着我们正在排除/删除
i
,这就是
removeBook
函数的要点

我有这么多的逻辑,但这三个点在那里做什么?我知道变量函数中使用了三个点,但是为什么我们在这个附加函数中需要三个点呢

当我删除这3个点时,我的编辑器说“不能使用books[I+1:](type[]Book的值)作为参数中的Book值来追加

如果您想查看完整的代码,它位于。

//append内置函数将元素追加到片段的末尾。如果
//它有足够的容量,目的地被重新许可以容纳
//新元素。否则,将分配一个新的底层数组。
//Append返回更新的切片。因此,有必要存储
//append的结果,通常在保存切片本身的变量中:
//slice=append(slice,elem1,elem2)
//切片=附加(切片,另一个切片…)
//作为一种特殊情况,将字符串附加到字节片是合法的,如下所示:
//slice=append([]字节(“hello”),“world”…)
func追加(切片[]类型,元素…类型)[]类型

因此,您只能追加元素,而不能追加整个片段。

检查追加定义

在第二个参数中,它接受多个“元素”

在您给出的示例中,它本质上是将元素作为逗号分隔的参数列表传递

假设书的长度是10,我是7。然后它传递切片中的前7个元素(项目0到6),然后以逗号分隔的列表形式传递第8和第9个元素

books = append(books[:i], books[i+1:]...)
实际上是

 books = append(books[:7], books[8], books[9])

添加整个切片。Append是一个可变函数
 books = append(books[:7], books[8], books[9])