【程式語言 — Go】關於JSON序列化、反序列化

更新於 2023/05/20閱讀時間約 2 分鐘

會撰寫這個篇章主要是使用Go語言進行軟體開發時發現到原來跟我們熟悉的Javascript差異這麼多,在Javascript的世界裡很容易對JSON格式的資料進行處理,但不同的是Golang是一種靜態語言,預設不希望我們動態的去擴增屬性,這樣比較安全,但也帶來了一些麻煩,比如說某些不該被過濾掉的卻被過濾掉了,跟我們所預期的結果不同,而以下就是一個簡單的案例,我們希望值雖為false仍需要被保留,才能正常進行運算,但預設的情況下卻沒這麼美好,總會有一些坑要踩,就讓我們來看看到底是什麼樣的坑吧!

用omitempty來過濾掉空的property造成bool false被過濾掉

一般來說我們會這樣定義Struct來接收前端請求的POST Body
type UpdateReq struct {
Name string `json:"name,omitempty" bson:"name,omitempty"`
Enabled bool `json:"enabled,omitempty" bson:"enabled,omitempty"`
}
那假設POST Body是這樣
{
enabled: false
}
此時我們利用gin的BindJSON來Unmarshal
var body domain.UpdateReq
c.BindJSON(&body)
結果印出來會是
{
}
上述結果的name被我們過濾掉是正常,但enabled就我們的需求上來看,不應該被過濾掉才對。
所以我們應該將bool、int這類的型態宣告為指標,如下:
type UpdateReq struct {
Name string `json:"name,omitempty" bson:"name,omitempty"`
Enabled *bool `json:"enabled,omitempty" bson:"enabled,omitempty"`
}
結果如我們的預期
{
enabled: false
}
即將進入廣告,捲動後可繼續閱讀
為什麼會看到廣告
avatar-img
116會員
261內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
由於Go語言本身沒有提供Enum的功能, 故我們可以使用package及type的技巧來達到類似的功能,假設今天要定義季節的enum型別, 包含了「春、夏、秋、冬」四種值的時候,可以怎麼做呢? 首先我們可以用package來框住season的範圍: 然而在season.go可以定義一個字串的類型 最
我們開發程式的過程中難免會依賴DB或其他服務, 但複雜的網路環境下我們並沒有辦法確保我們發送的請求是否正確的送達, 因此我們可以在程式中加入Retry機制, 提升我們軟體的強健性。 尤其是面對NoSQL相對弱一致性的DB時更需注意, 而在Go語言, 我們可以用簡單的技巧來完成Retry的策略, 在進
一般來說我們如果將程式運行在console上,只要用ctrl + c 之類的強制中斷方式就能讓程式中止,但如果我們想要在程式運行到一半時,偵測到某些例外狀況就離開程式,可以怎麼做呢? nodejs核心模組提供了process.exit()的方法可以讓程式強制中止,但使用了這個功能之後,我們尚未完成的
由於Javascript本身設計就適合於單線程的應用, 但一般後端應用程式都會支援多個服務來處理client的請求, nodejs中也提供了cluster模組來達成此功能。 Cluster的原理很簡單,由於每個Process都只能用單核心的CPU來運行,那麼就多開幾個來幫忙處理吧! 而這個Clust
這個篇章主要是讓我們能夠熟悉Whisper的安裝與使用方式,並簡單的對Youtube影片進行線上翻譯的工作,主軸在於了解一下整個Whisper使用方式到底是簡單還是複雜,就讓我們一起來玩玩看吧! 在這之前我們還是說一下Whisper它是什麼樣的一個工具,能夠做什麼? Whisper 是OpenAI
AMQP協議 Advanced Message Queuing Portocol(高級訊息佇列協議) Producer: 生產者, 負責生產訊息並送到交換機。 Broker: Message Queue的服務器(RabbitMQ…之類的產品) Exchange: 交換器, 它指定訊息
由於Go語言本身沒有提供Enum的功能, 故我們可以使用package及type的技巧來達到類似的功能,假設今天要定義季節的enum型別, 包含了「春、夏、秋、冬」四種值的時候,可以怎麼做呢? 首先我們可以用package來框住season的範圍: 然而在season.go可以定義一個字串的類型 最
我們開發程式的過程中難免會依賴DB或其他服務, 但複雜的網路環境下我們並沒有辦法確保我們發送的請求是否正確的送達, 因此我們可以在程式中加入Retry機制, 提升我們軟體的強健性。 尤其是面對NoSQL相對弱一致性的DB時更需注意, 而在Go語言, 我們可以用簡單的技巧來完成Retry的策略, 在進
一般來說我們如果將程式運行在console上,只要用ctrl + c 之類的強制中斷方式就能讓程式中止,但如果我們想要在程式運行到一半時,偵測到某些例外狀況就離開程式,可以怎麼做呢? nodejs核心模組提供了process.exit()的方法可以讓程式強制中止,但使用了這個功能之後,我們尚未完成的
由於Javascript本身設計就適合於單線程的應用, 但一般後端應用程式都會支援多個服務來處理client的請求, nodejs中也提供了cluster模組來達成此功能。 Cluster的原理很簡單,由於每個Process都只能用單核心的CPU來運行,那麼就多開幾個來幫忙處理吧! 而這個Clust
這個篇章主要是讓我們能夠熟悉Whisper的安裝與使用方式,並簡單的對Youtube影片進行線上翻譯的工作,主軸在於了解一下整個Whisper使用方式到底是簡單還是複雜,就讓我們一起來玩玩看吧! 在這之前我們還是說一下Whisper它是什麼樣的一個工具,能夠做什麼? Whisper 是OpenAI
AMQP協議 Advanced Message Queuing Portocol(高級訊息佇列協議) Producer: 生產者, 負責生產訊息並送到交換機。 Broker: Message Queue的服務器(RabbitMQ…之類的產品) Exchange: 交換器, 它指定訊息
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
在一次五天的年假中,我決定開始學習Python編程。雖然最初進展順利,但後來發現自己在解題和邏輯方面遇到了困難。經過思考後,我決定轉而學習C/C++,並且制定了一個計畫,希望成為一名後端工程師。這將需要挑戰我的時間管理能力。
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
先前大家為了數位中介服務法草案是否會箝制言論自由吵翻天,網路言論自由當然也是存在於Web3.0世界與幣圈,放眼現今與未來的Web3.0世界與幣圈,主要的生態系與應用大多在以太坊的智能合約與代幣經濟,而智能合約與代幣都是由程式語言所撰寫建構。但最近幣圈也出現言論自由遭到迫害的案例,也就是撰擬Torna
Thumbnail
最近很多人私訊我他們自學遇到的瓶頸,有些人會覺得學不會程式,是自己太笨沒天分,或從小數理能力就差,才學不起來。但以我自己這些年自學程式並創業的經驗,我認為可能原因是自己操之過急了,因為想要快速達到像是轉職或是創業等等目標,所以覺得得學得越快越好。但這個領域需要的是長時間的磨練,慢慢一點點累積
Thumbnail
【為何而學?】 相信剛入門自學程式的人都會遇到許多困難,可能教學資源太多無從下手,或是學了基礎可是無法自己寫出功能,不過最常見的應該屬目標導向的問題,就是不知道為何而學,我自己也是靠著自學製作了一個幫賣家封鎖電商黑名單的chrome插件賺取被動收入,對於設定目標有一點點心得想分享給大家:
Thumbnail
為什麼想學程式語言? 這個問題應該是知道我有在學程式語言的人,馬上脫口而出的問題。 對呀!WHY?一個即將邁向40大關的中年男子(從叔叔→阿伯),為什麼要這麼想不開,突然跳進一堆看不懂...呃...
Thumbnail
世界上有最好的程式語言嗎?答案絕對是否定的,每種語言都有適合的使用時機,而也有不少程式語言是隨著時代變遷而消失的。請放下自己要學到最好語言的心態,多看多學,自然會找到適合你的語言。這篇文章會用客觀的角度跟你分享最多人使用的程式語言。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
在一次五天的年假中,我決定開始學習Python編程。雖然最初進展順利,但後來發現自己在解題和邏輯方面遇到了困難。經過思考後,我決定轉而學習C/C++,並且制定了一個計畫,希望成為一名後端工程師。這將需要挑戰我的時間管理能力。
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
先前大家為了數位中介服務法草案是否會箝制言論自由吵翻天,網路言論自由當然也是存在於Web3.0世界與幣圈,放眼現今與未來的Web3.0世界與幣圈,主要的生態系與應用大多在以太坊的智能合約與代幣經濟,而智能合約與代幣都是由程式語言所撰寫建構。但最近幣圈也出現言論自由遭到迫害的案例,也就是撰擬Torna
Thumbnail
最近很多人私訊我他們自學遇到的瓶頸,有些人會覺得學不會程式,是自己太笨沒天分,或從小數理能力就差,才學不起來。但以我自己這些年自學程式並創業的經驗,我認為可能原因是自己操之過急了,因為想要快速達到像是轉職或是創業等等目標,所以覺得得學得越快越好。但這個領域需要的是長時間的磨練,慢慢一點點累積
Thumbnail
【為何而學?】 相信剛入門自學程式的人都會遇到許多困難,可能教學資源太多無從下手,或是學了基礎可是無法自己寫出功能,不過最常見的應該屬目標導向的問題,就是不知道為何而學,我自己也是靠著自學製作了一個幫賣家封鎖電商黑名單的chrome插件賺取被動收入,對於設定目標有一點點心得想分享給大家:
Thumbnail
為什麼想學程式語言? 這個問題應該是知道我有在學程式語言的人,馬上脫口而出的問題。 對呀!WHY?一個即將邁向40大關的中年男子(從叔叔→阿伯),為什麼要這麼想不開,突然跳進一堆看不懂...呃...
Thumbnail
世界上有最好的程式語言嗎?答案絕對是否定的,每種語言都有適合的使用時機,而也有不少程式語言是隨著時代變遷而消失的。請放下自己要學到最好語言的心態,多看多學,自然會找到適合你的語言。這篇文章會用客觀的角度跟你分享最多人使用的程式語言。