gpt4 book ai didi

arrays - 打印缺失值

转载 作者:行者123 更新时间:2023-12-03 10:09:15 25 4
gpt4 key购买 nike

我正在尝试使用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 Missing
Nothing is empty

world
预期产量:
a is Missing
world

最佳答案

您无法获取参数名称(例如a),有关详细信息,请参见Getting method parameter names
如果需要参数名称,请将参数包装到一个结构中,即可获取字段名称。您可以使用反射来遍历字段,并获取它们的值和名称。
例如:

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
此解决方案的一个非常不错的属性是 ,它不依赖于实际的参数类型。您可以将任何struct值传递给它,它将继续起作用。它还处理“所有”字段类型,而不仅仅是字符串。
因此,将签名修改为此:
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

关于arrays - 打印缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65623325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com