如何以优雅的方式检查多个字符串是否为空?这是我目前的做法:

//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不是指针,您也可以执行此操作,但是该结构将被复制。如果registerRequeststruct,那么您可以使用其地址来避免像这样复制它:
if r := &registerRequest; 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/

10-11 22:10