Check if a slice contains a struct with a given field value
go
Solution
You can use `reflect` to range over an `interface{}`, for instance:
func containsStructFieldValue(slice interface{} ,fieldName string,fieldValueToCheck interface {}) bool{
rangeOnMe := reflect.ValueOf(slice)
for i := 0; i < rangeOnMe.Len(); i++ {
s := rangeOnMe.Index(i)
f := s.FieldByName(fieldName)
if f.IsValid(){
if f.Interface() == fieldValueToCheck {
return true
}
}
}
}
Note that I did not check that `slice` is indeed a slice... If not, this code will panic. You can use `reflect.Kind` to check this if you want to avoid this behaviour.
Problem
Trying to check if a struct in some slice contains a value of a given field so i wrote this ``` func main() { //test Objs := []Obj{{1,"xxx"},{2,"yyy"},{3,"zzz"}} res := containsStructFieldValue(Objs,"X",1) fmt.Println(res) } type Obj struct { X int Y string } func containsStructFieldValue(slice []Obj ,fieldName string,fieldValueToCheck interface {}) bool{ for _,s := range slice{ r := reflect.ValueOf(s) f := r.FieldByName(fieldName) if f.IsValid(){ if f.Interface() == fieldValueToCheck{ return true //a field with the given value exists } } } return false } ``` i need it to work for any given struct type but when i tried `slice []interface` as the parameter i found out that its not possible, any idea on how to make the above method work for any struct type?