Golang中这是什么意思?

Golang中这是什么意思? 有一行代码:

books := append(books[:i], books[i+1:]...)

这里的 ... 是什么意思?

2 回复

你有一个书籍切片,想要删除位置 i 的元素

books = append(books[:i], books[i+1:]...)

这里使用的是 books = append( 而不是 books := append(,因为你不是在定义新变量。books[:i] 表示从开始到第 i 个元素(不包括第 i 个)的切片,而 books[i+1:] 表示从 i+1 到末尾的所有元素。末尾的三个点是将切片元素展开,因为 append 函数要求第一个参数是某种类型的切片,其余参数则是该类型的元素。books[i+1:]... 相当于依次传入 books[i+1], books[i+1 + 1], books[i+1 + 2] 直到最后一个元素。

更多关于Golang中这是什么意思?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,... 在这里是展开操作符(variadic unpack operator),用于将切片(slice)的元素作为可变参数(variadic argument)传递给函数。

具体到你的代码:

books := append(books[:i], books[i+1:]...)

这里的 ...books[i+1:] 这个切片展开为独立的元素,然后传递给 append 函数。append 函数的签名是:

func append(slice []Type, elems ...Type) []Type

第二个参数接受可变数量的元素。如果不使用 ...,代码会变成:

books := append(books[:i], books[i+1:])  // 编译错误

这会引发编译错误,因为 books[i+1:] 是一个切片,而 append 期望的是单个元素或多个元素,不是一个切片。

使用 ... 的正确示例:

package main

import "fmt"

func main() {
    // 原始切片
    books := []string{"A", "B", "C", "D", "E"}
    i := 2 // 要删除的索引
    
    // 删除索引为2的元素("C")
    books = append(books[:i], books[i+1:]...)
    
    fmt.Println(books) // 输出: [A B D E]
}

在这个例子中:

  • books[:i] 得到 ["A", "B"]
  • books[i+1:] 得到 ["D", "E"]
  • ...["D", "E"] 展开为独立的参数 "D", "E"
  • 最终 append 接收到:append(["A", "B"], "D", "E")

这种用法常见于删除切片中的元素,通过将切片前半部分和后半部分拼接起来实现删除操作。

回到顶部