-2
type slice []T

func (s *slice) remove(element T) []T {

    newSlice := []T{}

    for _, i:= range s {
        if i != element {
            newSlice = append(newSlice, i)
        }
    }
    return newSlice
}

I am trying to create a generic receiver func to remove elements from a slice, above the code I am working with, but I am getting Undeclared Name: T error..

Ken White
  • 123,280
  • 14
  • 225
  • 444
arun
  • 91
  • 1
  • 1
  • 8
  • You can also check [this go/exp library](https://pkg.go.dev/golang.org/x/exp/slices#Delete) to manipulate generic slices. – Ado Ren Sep 28 '22 at 08:40

1 Answers1

1

That's because you haven't defined type slice as a generic type. You have just defined it as a slice of type T where type T doesn't exist.

If you do define slice as a generic type, then your approach works:

type slice[T comparable] []T

func (s *slice[T]) remove(element T) []T {

    newSlice := []T{}

    for _, i := range *s {
        if i != element {
            newSlice = append(newSlice, i)
        }
    }
    return newSlice
}

(Also needed to change range s to range *s)

Erwin Bolwidt
  • 30,799
  • 15
  • 56
  • 79