2 回答
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
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")
}
- 2 回答
- 0 关注
- 112 浏览
添加回答
举报