在golang的范围循环中过滤值

在golang的范围循环中过滤值,go,Go,我有以下运行正常的代码,我在mStr上循环并打印 文件的值 func setFile(file io.Writer, mStr []*mod.M, mdl []string) { for i, mod := range mStr { fmt.Fprint(file, “app”) fmt.Fprint(file, “app1”) … } } 现在我需要的是在范围上提供一个过滤器,

我有以下运行正常的代码,我在
mStr上循环并打印
文件的值

func setFile(file io.Writer, mStr []*mod.M, mdl []string) {

    for i, mod := range mStr {
            fmt.Fprint(file, “app”)
            fmt.Fprint(file, “app1”)
                        …

    }
}
现在我需要的是在范围上提供一个过滤器, e、 g.如果mod.Name==“app”,则只打印到文件中

func setFile(file io.Writer, mStr []*mod.M, mdl []string) {

    for i, mod := range mStr {

    if mod.Name == mdl[i] {
            fmt.Fprint(file, “app”)
            fmt.Fprint(file, “app1”)
                        …

    }
  }
}
虽然这可能有效,但它在代码中引入了一些
if-else
分叉来支持以下内容:

  • 如果
    mdl
    (可以没有任何值),则在所有mStr值上循环并打印到所有
  • 如果mdl包含值,则仅当
    mod.Name==mdl[I]
    时打印,否则不打印

  • 在Golang有没有一种清洁剂的方法来进行这种循环过滤

    检查您在函数中传递的切片的长度。如果切片为空,则长度为零

    if len(mdl) > 0 && mod.Name == mdl[i] {
            fmt.Fprint(file, “app”)
            fmt.Fprint(file, “app1”)
            // code
    }else{
         // code
    }
    

    在检查空切片时使用if-else并没有什么错。@Himanshu-那个么您将如何编写它呢?:)你能提供它作为答案吗?根据问题应该是
    i>=len(mdl)| | mod.Name==mdl[i]
    ;如果
    mdl
    为空,则处理匹配值或所有匹配值。@当
    i=0
    时,此条件将失败,因为
    mdl
    长度将为零,即使切片为空,代码也将运行。如果第一个条件满足,它将不检查第二个条件。它将运行代码。代码应该在切片为空时运行:“1.如果mdl为空(可以没有任何值),则在所有mStr值上循环并打印到所有。”@Peter如果切片不是空的,那么第一个条件将为真,那么代码应该为那些等于
    mod.Name
    的切片值运行。但你们的选择会对每一个值都有效,因为第二个条件不一定是真的,我不明白你们想说什么。如果
    mdl
    不为空,则只有当
    mStr
    大于
    mdl
    时,第一个条件才会为真。它防止了越界恐慌,同时也覆盖了OP的第一个目标。