go - 不能使用 p[idx + 1 :] (type []Person) as type Person in append

标签 go

<分区>

package main

import (
  "fmt"
)

type Person struct {
  name string
  age int
}

func main() {
  p := []Person {
    {"Kate", 20},
    {"Simon", 30},
    {"John", 28},
    {"Lake", 19},
  }

  n := []string {
    "Simon",
    "Kate",
    "Lake",
  }

  for idx := 0; idx < len(p); idx++ {
    for _, elem := range n {
      if p[idx].name == elem {
        p = append(p[:idx], p[idx+1:])
        idx--
        break
      }
    }
  }

  fmt.Println(p)
}

我有上面的代码来删除 p slice 中显示在 n slice 中的人。

但是在编译的时候出现了如下错误:

./main.go:29:19: cannot use p[idx + 1:] (type []Person) as type Person in append

最佳答案

如错误所述,您的 p[idx + 1:] 是一个 []Person

要将多个元素附加到一个 slice ,您需要使用扩展运算符,就像 SliceTricks 上给出的示例一样页:

p = append(p[:idx], p[idx+1:]...)

关于go - 不能使用 p[idx + 1 :] (type []Person) as type Person in append,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57707040/

相关文章:

go - 包含需要清理的对象的包

docker - 构建 Docker 镜像时 Go 构建失败

regex - Golang 正则表达式引用子匹配

Golang Base64 到 Hex 转换

go - 为什么当你删除前 n 项而不是最后 n 项时, slice 的容量会改变?

go - 为什么在值而不是指针上定义方法?

go - 在 Go 中重新连接到 Redis 订阅的惯用方法是什么?

parallel-processing - 数据通道关闭时 Goroutines 不退出

go - 使用泛型类型参数在 Go 中创建函数

python - 为什么 toTitle 在 Go 中不将小写字母大写?