我撰寫了以下代碼來檢測結果是否有超過 1 個具有值的 SomeStruct,如果只有一個則回傳 AnotherStruct.ID。通常結果只有一個有值的SomeStruct,其余的都是空的,然后我會得到AnotherStruct的id。您可以閱讀我下面的邏輯,邏輯是正確的,但在我看來很難看,有沒有更好的方法來寫這個?
var tmp []string
for _, id := range result {
if len(id.SomeStruct) > 0 {
tmp = append(tmp, id.AnotherStruct.ID)
}
}
if len(tmp) > 1 {
return "Failure, ", fmt.Errorf("More than 1 id that has unique code")
} else {
return tmp[0], nil
}
uj5u.com熱心網友回復:
您所要做的就是存盤來自另一個結構的 ID,并確保您的 ID 不超過 1。
這是對@S4eed3sm 答案的擴展:
var tmp string
for _, o := range result {
if len(o.SomeStruct) > 0 {
if len(tmp) > 0 {
return "Failure, ", fmt.Errorf("More than 1 id that has unique code")
}
tmp = o.AnotherStruct.ID
}
}
return tmp, nil
uj5u.com熱心網友回復:
您不需要將 ID 附加到 tmp 切片,使用計數器并在 for 內部檢查它,這樣您就有更好的性能。也許這會幫助你:
c := 0
tmp := ""
for _, id := range result {
if len(id.SomeStruct) > 0 {
c
if c > 1 {
return "", fmt.Errorf("More than 1 id that has unique code")
}
tmp = id.AnotherStruct.ID
}
}
return tmp, nil
我錯過了 tmp 回傳值,謝謝@stefan-zhelyazkov
uj5u.com熱心網友回復:
我不完全理解你的邏輯和用例,但最后一個 else 是多余的而不是慣用的。
var tmp []string
for _, id := range result {
if len(id.SomeStruct) > 0 {
tmp = append(tmp, id.AnotherStruct.ID)
}
}
if len(tmp) > 1 {
return "Failure, ", fmt.Errorf("More than 1 id that has unique code")
}
// else was redundant
return tmp[0], nil
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400785.html
標籤:去
