這個函式接受兩個字串并回傳 struct 或 nil,我在這個函式內部寫了一個結構體,只用于這個函式。
type OrgFundingsDetailsFCT struct {
ID int `db:"id"`
OrgProfileID int `db:"org_profile_id"`
OrgID int `db:"org_id"`
RefID string `db:"ref_id"`
AmountUSD float64 `db:"amount_usd"`
FundingDate string `db:"funding_date"`
Status string `db:"status"`
Round string `db:"round"`
CreatedBy string `db:"created_by"`
}
func (s *Server) getCompareOrgFundingsByRefID(refID, status string) (*OrgFundingsDetailsFCT, error) {
type orgFunding struct {
RefID string `db:"ref_id"`
Status string `db:"status"`
}
var orgFundingsDetailsFCT OrgFundingsDetailsFCT
orgfunding := orgFunding{
RefID: refID,
Status: status,
}
const query = `SELECT id,
org_profile_id,
org_id,
ref_id,
amount_usd,
funding_date,
status,round,
created_by
FROM org_fundings
WHERE ref_id=:ref_id AND status=:status`
if err := s.db.NamedGet(&orgFundingsDetailsFCT, query, orgfunding); err == sql.ErrNoRows {
s.logger.Infof("empty rows! getCompareOrgFundingsByRefID #111 % v", err)
return nil, nil
} else if err != nil {
s.logger.Infof("errors found! getCompareOrgFundingsByRefID#111 % v", err)
return nil, err
}
return &orgFundingsDetailsFCT, nil
}
現在我正在檢查這個函式是否nil像這樣回傳
if nil != orgFundingsRefIdPending{
// logic
}
但我的問題是,如果我像這樣檢查它是否相同?
if orgFundingsRefIdPending != nil{
//logic
}
如果左側為零并檢查我的結果是右側或,我的結果是左側并且檢查為零是右側,是否相同?這是否意味著同樣的事情發生,如果我把nil兩邊?另外,如果我在僅使用功能上使用結構,它是否有效?
uj5u.com熱心網友回復:
該getCompareOrgFundingsByRefID()函式回傳一個指標和一個error值。要檢查回傳值(指標)是否為nil,只需將其與 進行比較nil,例如:
var refID, status string
// Set input params
orgFundingsRefIdPending, err := getCompareOrgFundingsByRefID(refID, status)
if err != nil {
// Handle error
}
if orgFundingsRefIdPending != nil {
// Use orgFundingsRefIdPending
}
的==和!=比較運算子只能執行(其結果只能確定)如果兩個運算元的評價。此外,由于這些比較運算子是自反的(意思a == b是true僅當b == a),順序無關緊要。所以a == b和b == a是等價的。
如果運算子不是自反的(例如<soa < b與 不同b < a),或者如果不是所有運算元都需要其結果(例如邏輯 OR ( ||)),則順序很重要,因為我們知道,如果的運算元||是true,結果true與其他值無關。由于 Go 的||運算子使用短路求值(如果在求值所有運算元之前結果已知,則其余運算元不求值,從左到右),順序在||. 例如,f() || g()如果f()回傳true,g()則不會呼叫該函式。
注意:回到 yoru 情況,如果回傳的指標不是,nil但您想檢查指向的結構值是否是其型別的零值,您可以簡單地將其與OrgFundingsDetailsFCT{}:
if orgFundingsRefIdPending != nil {
// Use orgFundingsRefIdPending
// Is it the zero value?
if *orgFundingsRefIdPending == (OrgFundingsDetailsFCT{}) {
// It's the zero value
}
}
有關詳細資訊和更多選項,請參閱如何檢查空結構?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393697.html
