首頁 >後端開發 >Golang >為什麼 Go 結構中的大寫字段只能在套件外部訪問,以及如何在 JSON 編組和資料庫互動中包含小寫字段?

為什麼 Go 結構中的大寫字段只能在套件外部訪問,以及如何在 JSON 編組和資料庫互動中包含小寫字段?

Barbara Streisand
Barbara Streisand原創
2024-12-02 05:25:12497瀏覽

Why are only capitalized fields in Go structs accessible outside the package, and how can I include lowercase fields in JSON marshaling and database interactions?

了解Go 結構體中的字段可見性

在Go 中使用結構體時,開發人員經常會遇到一個問題,即只能存取具有大寫標識符的欄位在目前包之外。在資料庫中儲存結構或將它們編組為 JSON 時,這可能會特別成問題。

在提供的程式碼片段中,Person 和 Sample 結構包含具有大寫和小寫標識符的欄位。然而,當與 CouchDB 資料庫互動或將 Sample 結構轉換為 JSON 時,僅包含具有大寫標識符的欄位。

此行為植根於 Go 的可見性規則,該規則規定僅以小寫字母開頭的標識符在當前包中可見。由於 JSON 編碼器和 CouchDB 用戶端位於不同的套件中,因此它們無法直接存取結構體中帶有小寫標識符的欄位。

解決方案:使用 JSON 標籤

來克服針對這個限制,Go 提供了一種稱為「JSON 標籤」的機制。 JSON 標籤可讓您指定在 JSON 編組和解組期間應如何對結構欄位進行編碼和解碼。透過將 JSON 標籤新增至具有小寫標識符的字段,您可以使其對 JSON 編碼器可見。

例如:

在此更新的程式碼中,姓名和年齡欄位都以 json 指令標記。這指示 JSON 編碼器在編組期間包含這兩個字段,即使age以小寫字母開頭。

擴展至CouchDB

雖然用於CouchDB 存取的指定庫確實如此沒有明確支援JSON 標籤,可以利用Go 標準庫的JSON 編碼功能來實現所需的結果。以下是使用標記欄位的 PostDocument 函數的修改版本:

透過使用 json.Marshal 函數將結構體轉換為 JSON,然後將其發佈到資料庫,標記欄位將被正確編碼。

結論

理解 Go 的字段可見性規則並利用在跨包邊界處理結構時,JSON 標籤至關重要。透過應用這些原則,您可以確保在資料交換期間所有欄位都可存取並正確序列化。

以上是為什麼 Go 結構中的大寫字段只能在套件外部訪問,以及如何在 JSON 編組和資料庫互動中包含小寫字段?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn