2 回答
TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
無(wú)法獲取參數(shù)名稱(chēng)(例如 ),有關(guān)詳細(xì)信息,請(qǐng)參閱獲取方法參數(shù)名稱(chēng)。a
如果需要參數(shù)名稱(chēng),請(qǐng)將參數(shù)包裝到結(jié)構(gòu)中,即可獲取字段的名稱(chēng)。您可以使用反射來(lái)循環(huán)訪(fǎng)問(wèn)字段,并獲取其值和名稱(chēng)。
例如:
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)
}
}
}
測(cè)試它:
p := Param{"", "world", ""}
CheckValues(p)
輸出(在Go Playground上嘗試):
A is empty
B is NOT empty
C is empty
此解決方案的一個(gè)非常好的屬性是它不依賴(lài)于實(shí)際的參數(shù)類(lèi)型。您可以將任何結(jié)構(gòu)值傳遞給它,它將繼續(xù)工作。此外,它還處理“所有”字段類(lèi)型,而不僅僅是字符串。
因此,將簽名修改為:
func CheckValues(p interface{})
您還可以傳遞匿名結(jié)構(gòu),而不僅僅是定義類(lèi)型的值:
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貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
此代碼是為了匹配您期望的結(jié)果。但這不是檢查參數(shù)名稱(chēng)的正確方法。
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 關(guān)注
- 160 瀏覽
添加回答
舉報(bào)
