在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的第一个目标。