如何从Go中的结构切片中删除结构?

如何从Go中的结构切片中删除结构?,go,Go,如何从用户定义结构的用户定义切片中删除用户定义结构 大概是这样的: type someStruct struct { someOtherStruct *typeOfOtherStruct someInt int someString string } var someStructs []someStruct func someFunc(ss someStruct, ssSlice someStructs) { // .. want

如何从用户定义结构的用户定义切片中删除用户定义结构

大概是这样的:

type someStruct struct {
    someOtherStruct *typeOfOtherStruct
    someInt         int
    someString      string
}

var someStructs []someStruct

func someFunc(ss someStruct, ssSlice someStructs) {
    // ..  want to remove ss from ssSlice
}

我可能应该循环直到找到索引,然后删除它。但是我如何比较结构呢?

找到元素并制作一个减去该索引的新切片

榜样


要从切片
s
中删除第一个值
v
,可以执行以下操作:
对于i:=range s{if s[i]==v{s=append(s[:i],s[i+1:];break}
(or)。谢谢。但是如果某个结构嵌入了另一个结构,或者指向某个结构的指针,我还能将它们与等号“==”进行比较吗?比较的是什么?是结构内部的值,还是结构的内存位置?正在比较值。如果您有嵌入式指针,我相信指针的值就是比较的值。谢谢,这非常有帮助。
package main

import "fmt"

type someStruct struct {
    someInt    int
    someString string
}

func removeIt(ss someStruct, ssSlice []someStruct) []someStruct {
    for idx, v := range ssSlice {
        if v == ss {
            return append(ssSlice[0:idx], ssSlice[idx+1:]...)
        }
    }
    return ssSlice
}
func main() {
    someStructs := []someStruct{
        {1, "one"},
        {2, "two"},
        {3, "three"},
    }
    fmt.Println("Before:", someStructs)
    someStructs = removeIt(someStruct{2, "two"}, someStructs)
    fmt.Println("After:", someStructs)
}