为了账号安全,请及时绑定邮箱和手机立即绑定

打印缺失值

打印缺失值

Go
梦里花落0921 2022-08-01 15:17:00
使用Go,我正在尝试将值从main发送到函数。我想检查发送到函数的任何参数是否为空。如果有任何缺失值,我想打印“参数值”为空。如果有多个参数为空,我也想打印出来。如果正确给出了所有参数,则返回该值。func FederationValidarator(a string, b string) (string, string) {    // var Messages []string    rArray := [2]string{a, b}    // i :=0    for i := 0; i < len(rArray); i++ {        if rArray[i] != "" {            fmt.Println("Nothing is empty")        } else {            // var Messages []string            fmt.Println("%s is Missing")        }    }    return a, b}func main() {    a, b := FederationValidarator("", "world")    fmt.Println(a)    fmt.Println(b)}如何编码以打印缺失值?我想得到以下输出。结果:%s is MissingNothing is emptyworld预期输出:a is Missingworld
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

无法获取参数名称(例如 ),有关详细信息,请参阅获取方法参数名称。a


如果需要参数名称,请将参数包装到结构中,即可获取字段的名称。您可以使用反射来循环访问字段,并获取其值和名称。


例如:


type Param struct {

    A string

    B string

    C string

}


func CheckValues(p Param) {

    v := reflect.ValueOf(p)


    t := v.Type()

    for i := 0; i < v.NumField(); i++ {

        name := t.Field(i).Name

        if v.Field(i).IsZero() {

            fmt.Printf("%s is empty\n", name)

        } else {

            fmt.Printf("%s is NOT empty\n", name)

        }

    }

}

测试它:


p := Param{"", "world", ""}

CheckValues(p)

输出(在Go Playground上尝试):


A is empty

B is NOT empty

C is empty

此解决方案的一个非常好的属性是它不依赖于实际的参数类型。您可以将任何结构值传递给它,它将继续工作。此外,它还处理“所有”字段类型,而不仅仅是字符串。


因此,将签名修改为:


func CheckValues(p interface{})

您还可以传递匿名结构,而不仅仅是定义类型的值:


a, b, c, d := "", "world", 0, 3


CheckValues(struct {

    A string

    B string

    C int

    D int

}{a, b, c, d})

这将输出(在Go Playground上尝试):


A is empty

B is NOT empty

C is empty

D is NOT empty


查看完整回答
反对 回复 2022-08-01
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

此代码是为了匹配您期望的结果。但这不是检查参数名称的正确方法。


func FederationValidarator(a string, b string) (string, string) {

    

    rArray := [2]string{a, b}

    

    for i := 0; i < len(rArray); i++ {

        if string(rArray[i]) == "" {

            fmt.Printf("%s is Missing\n", rArray[i]) // %s is empty string, Then nothing will appear.

        } else {                        

           fmt.Println(rArray[i])

        }

    }    

    return a, b

}

 

func main() {

    _, _ = FederationValidarator("", "world")

}


查看完整回答
反对 回复 2022-08-01
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信