Asa*_*hel -1 comparison null go
该函数接受两个字符串并返回 struct 或 nil,我在该函数内编写了一个 struct 仅供该函数使用。
\ntype OrgFundingsDetailsFCT struct {\n ID int `db:"id"`\n OrgProfileID int `db:"org_profile_id"`\n OrgID int `db:"org_id"`\n RefID string `db:"ref_id"`\n AmountUSD float64 `db:"amount_usd"`\n FundingDate string `db:"funding_date"`\n Status string `db:"status"`\n Round string `db:"round"`\n CreatedBy string `db:"created_by"`\n}\n
Run Code Online (Sandbox Code Playgroud)\nfunc (s *Server) getCompareOrgFundingsByRefID(refID, status string) (*OrgFundingsDetailsFCT, error) {\n type orgFunding struct {\n RefID string `db:"ref_id"`\n Status string `db:"status"`\n }\n\n var orgFundingsDetailsFCT OrgFundingsDetailsFCT\n\n orgfunding := orgFunding{\n RefID: refID,\n Status: status,\n }\n\n const query = `SELECT id,\n org_profile_id,\n org_id,\n ref_id,\n amount_usd,\n funding_date,\n status,round, \n created_by \n FROM org_fundings \n WHERE ref_id=:ref_id AND status=:status`\n\n if err := s.db.NamedGet(&orgFundingsDetailsFCT, query, orgfunding); err == sql.ErrNoRows {\n s.logger.Infof("empty rows! getCompareOrgFundingsByRefID #111 %+v", err)\n return nil, nil\n } else if err != nil {\n s.logger.Infof("errors found! getCompareOrgFundingsByRefID#111 %+v", err)\n return nil, err\n }\n return &orgFundingsDetailsFCT, nil\n}\n
Run Code Online (Sandbox Code Playgroud)\n现在我正在检查这个函数是否nil
像这样返回
if nil != orgFundingsRefIdPending{\n// logic\n}\n
Run Code Online (Sandbox Code Playgroud)\n但我的问题是我是否像这样检查是否相同?
\n if orgFundingsRefIdPending != nil{\n//logic\n}\n
Run Code Online (Sandbox Code Playgroud)\n如果左侧为零并检查我的结果是右侧,或者,我的结果是左侧并检查为零是右侧,是否相同?这是否意味着如果我将 \xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d 放在任一侧,也会发生同样的事情nil
?另外,如果我在仅使用函数上使用结构,它是有效的吗?
该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
}
Run Code Online (Sandbox Code Playgroud)
仅当两个操作数均被求值时,才能执行==
and!=
比较运算符(只能确定其结果)。此外,由于这些比较运算符是自反的(含义a == b
是true
仅且仅当b == a
),因此顺序并不重要。所以a == b
和b == a
是等价的。
如果运算符不是自反的(例如<
soa < b
与 不同b < a
),则顺序很重要,或者如果其结果不需要所有操作数(例如逻辑 OR ( ||
)),则顺序可能很重要,因为我们知道,如果其中任何一个||
is的操作数true
,结果true
与其他值无关。由于 Go 的||
运算符使用短路求值(如果在求值所有操作数之前已知结果,则不求其余操作数,从左到右),因此在 的情况下顺序确实很重要||
。例如,在f() || g()
if f()
returns中true
,该g()
函数将不会被调用。
注意:回到你的情况,如果返回的指针不是nil
,但你想检查指向的结构体值是否是其类型的零值,你可以简单地将它与OrgFundingsDetailsFCT{}
:
if orgFundingsRefIdPending != nil {
// Use orgFundingsRefIdPending
// Is it the zero value?
if *orgFundingsRefIdPending == (OrgFundingsDetailsFCT{}) {
// It's the zero value
}
}
Run Code Online (Sandbox Code Playgroud)
有关详细信息和更多选项,请参阅如何检查空结构?