php小編草莓今天為大家介紹一種常見的程式設計技巧-"檢查 nil 後從結構體中賦值"。在編寫程式碼時,我們經常會遇到需要從一個結構體中取得某個欄位的值的情況。然而,由於可能存在 nil 值的情況,直接取值可能會導致程式崩潰。為了解決這個問題,我們需要在取值前先進行 nil 檢查,以確保程式的穩定性。本文將詳細介紹這種技巧的具體實作方式,幫助讀者更能理解並應用於實際開發中。
我有一個結構體,其中包含結構體等元素。
假設我的分配如下:
validfrom := dkdm.authenticatedpublic.requiredextensions.kdmrequiredextensions.contentkeysnotvalidbefore
該資料是動態的,任何時候的任何元素都可能因解析錯誤或沒有資料而為零。
例如,kdmrequiredextensions
可以是 nil,當我嘗試存取 contentkeysnotvalidbefore
時,它將拋出 nil 指標引用錯誤。
是否有可能有一種方法,接受元素並逐一檢查值鏈,只有在沒有元素為 nil 時才返回。
validfrom := checkandassign(dkdm.authenticatedpublic.requiredextensions.kdmrequiredextensions.contentkeysnotvalidbefore)
我在賦值之前嘗試過 if 語句,但希望有一個更簡潔的方法。
if dkdm.AuthenticatedPublic.RequiredExtensions != nil && dkdm.AuthenticatedPublic.RequiredExtensions.KDMRequiredExtension != nil { validFrom = dkdm.AuthenticatedPublic.RequiredExtensions.KDMRequiredExtensions.ContentKeysNotValidBefore }
是否有可能有一種方法,接受元素並逐一檢查值鏈,只有在沒有元素為 nil 時才返回。
不,go 中沒有這樣的語法或工具。
我在賦值之前嘗試過 if 語句,但希望有一個更簡潔的方法。
if
語句是「乾淨」的方式。您可以透過引入一個新變數來縮短它,例如
if re := dkdm.AuthenticatedPublic.RequiredExtensions; re != nil && re.KDMRequiredExtension != nil { .... }
以上是檢查 nil 後從結構體中賦值的詳細內容。更多資訊請關注PHP中文網其他相關文章!