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 關注
- 136 瀏覽
添加回答
舉報