首頁 >後端開發 >Golang >檢查 nil 後從結構體中賦值

檢查 nil 後從結構體中賦值

PHPz
PHPz轉載
2024-02-09 13:54:08561瀏覽

检查 nil 后从结构体中赋值

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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除