Calculate slice length in structure field

WBOY
Release: 2024-02-09 14:09:19
forward
542 people have browsed it

Calculate slice length in structure field

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.

Question content

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
}
Copy after login

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)
}
Copy after login

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.

Solution

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
}
Copy after login

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!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!