首页 > 后端开发 > Golang > 正文

计算结构体字段中的切片长度

WBOY
发布: 2024-02-09 14:09:19
转载
540 人浏览过

计算结构体字段中的切片长度

php小编鱼仔将为您介绍如何计算结构体字段中的切片长度。在编程中,结构体是一种用于组织相关数据的数据结构。在某些情况下,我们可能需要计算结构体字段中的切片长度,以便在程序中进行相关操作。计算结构体字段的切片长度可以帮助我们更好地理解和处理数据,提高程序的效率和准确性。接下来,我们将详细介绍如何进行计算,并给出相应的示例。

问题内容

我认为我需要一个比大小写切换更好的解决方案,因为结构获得更多字段,我的函数将变得冗长。有没有办法把我的开关换成循环?

我有以下代码

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
}
登录后复制

这对我有用,但真正的结构包含 12 个字段,这使得我的函数又长又重复​​。

我试过了

for _, value := range categories {
        if len("data." + value) == 0 {
            return errors.New(value + errMsg)
}
登录后复制

但是当我运行代码时,我花了一点时间注意到它没有按预期工作,我得到了字符串的长度。我尝试过 data[value] 但也不起作用。

解决方法

有没有办法把我的开关换成循环?

您可以执行以下操作:

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
}
登录后复制

以上是计算结构体字段中的切片长度的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!