php Xiaobian Yuzai will introduce to you how to calculate the slice length in the structure field. In programming, a struct is a data structure used to organize related data. In some cases, we may need to calculate the slice length in the structure field in order to perform related operations in the program. Calculating the slice length of a structure field can help us better understand and process data, and improve the efficiency and accuracy of the program. Next, we will explain in detail how to perform the calculation and give corresponding examples.
I think I need a better solution than case switching because the struct gets more fields and my function will become verbose. Is there a way to change my switch to loop?
I have the following code
type things struct { streetnames []string `json:"streetnames"` letters []string `json:"letters"` malenames []string `json:"malenames"` } func checkcategories(data *things, filepath string) error { errmsg := "list has no values or is a missing category in file: " + filepath categories := []string{"street_name", "letter", "male_first_name"} for _, value := range categories { switch value { case "street_name": if len(data.streetnames) == 0 { return errors.new("street_name " + errmsg) } case "letter": if len(data.letters) == 0 { return errors.new("letter " + errmsg) } case "male_first_name": if len(data.malenames) == 0 { return errors.new("male_first_name " + errmsg) } } } return nil }
This works for me, but the real structure contains 12 fields, which makes my function long and repetitive.
I tried
for _, value := range categories { if len("data." + value) == 0 { return errors.New(value + errMsg) }
But when I ran the code it took me a moment to notice that it wasn't working as expected, I was getting the length of the string. I tried data[value] but that doesn't work either.
Is there a way to change my switch to a loop?
You can do the following:
type Things struct { StreetNames []string `json:"streetNames"` Letters []string `json:"letters"` MaleNames []string `json:"maleNames"` } func CheckCategories(data *Things, filePath string) error { errMsg := "list has no values or is a missing category in File: " + filePath categories := []struct{ name string slice []string }{ {"street_name", data.StreetNames}, {"letter", data.Letters}, {"male_first_name", data.MaleNames}, } for _, v := range categories { if len(v.slice) == 0 { return errors.New(v.name + " " + errMsg) } } return nil }
The above is the detailed content of Calculate slice length in structure field. For more information, please follow other related articles on the PHP Chinese website!