如何以优雅的方式检查多个字符串是否为空?这是我目前的做法:
//if one required field is empty, close the connection
if (registerRequest.Email == "") ||
(registerRequest.PhoneNumber == "")||
(registerRequest.NachName =="") ||
(registerRequest.VorName =="") ||
(registerRequest.Password =="") ||
(registerRequest.VerificationId ==""){
//Could not proceed
w.WriteHeader(UNABLE_TO_PROCEED)
w.Write([]byte("Unable to register account."))
return
}
最佳答案
注意:如果将“is-valid”条件保留在处理程序中,并且将条件分成另一个函数或方法,则可以使用下面的解决方案。
您可以创建一个简单的帮助函数,该函数具有可变参数,并且可以使用任意数量的string
值来调用它:
func containsEmpty(ss ...string) bool {
for _, s := range ss {
if s == "" {
return true
}
}
return false
}
使用它的示例:
if containsEmpty("one", "two", "") {
fmt.Println("One is empty!")
} else {
fmt.Println("All is non-empty.")
}
if containsEmpty("one", "two", "three") {
fmt.Println("One is empty!")
} else {
fmt.Println("All is non-empty.")
}
上面的输出(在Go Playground上尝试):
One is empty!
All is non-empty.
您的示例如下所示:
if containsEmpty(registerRequest.Email,
registerRequest.PhoneNumber,
registerRequest.NachName,
registerRequest.VorName,
registerRequest.Password,
registerRequest.VerificationId) {
// One of the listed strings is empty
}
另外
registerRequest
是一个很长的名字,可以缩写为r
。如果您不能或不想在周围的代码中重命名它,并且想缩短条件,还可以执行以下操作:如果
registerRequest
是一个指针(或接口(interface)),则还可以编写:if r := registerRequest; containsEmpty(r.Email,
r.PhoneNumber,
r.NachName,
r.VorName,
r.Password,
r.VerificationId) {
// One of the listed strings is empty
}
实际上,即使
registerRequest
不是指针,您也可以执行此操作,但是该结构将被复制。如果registerRequest
是struct
,那么您可以使用其地址来避免像这样复制它:if r := ®isterRequest; containsEmpty(r.Email,
r.PhoneNumber,
r.NachName,
r.VorName,
r.Password,
r.VerificationId) {
// One of the listed strings is empty
}
关于string - 优雅的方法来检查多个字符串是否为空,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48226789/