欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?nbsp;null 問題的解決方案

 更新時間:2023年09月24日 10:02:04   作者:路多辛  
在 Golang 中,經(jīng)常需要將其他類型(例如 slice、map、struct 等類型)的數(shù)據(jù)轉(zhuǎn)化為 JSON 格式,有時候轉(zhuǎn)化的結(jié)果并不是預(yù)期中的,例如將一個空的切片轉(zhuǎn)化為 JSON 時,會變成"null",所以本文將給大家介紹一下解決方法,需要的朋友可以參考下

問題

在 Golang 中,經(jīng)常需要將其他類型(例如 slice、map、struct 等類型)的數(shù)據(jù)轉(zhuǎn)化為 JSON 格式。有時候轉(zhuǎn)化的結(jié)果并不是預(yù)期中的,例如將一個空的切片轉(zhuǎn)化為 JSON 時,會變成"null",而并非預(yù)期的"[]"。示例代碼如下:

package main
import (
	"encoding/json"
	"fmt"
)
func main() {
	var res []string
	b, err := json.Marshal(res)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(b))
}

運行示例看下結(jié)果:

$ go run main.go
null

結(jié)果輸出的值為 “null”,而并非預(yù)期中的 “[]”。

原因

上面示例代碼中的 res 是通過 var 關(guān)鍵字來聲明為字符串類型切片的,這樣的切片稱為零值切片,其值為 nil,無指向任何內(nèi)存地址。其出現(xiàn)實標題中這種情況的切片就是零值切片,接下來介紹下零值切片和空切片。

在 Golang 中,切片是一個長度可變的數(shù)組,有三個屬性:指針、長度和容量。"零值切片"和"空切片"是兩種特殊的切片。

  1. 零值切片:當一個切片類型的變量被聲明但沒有被顯式初始化時,它的值就是一個零值切片。零值切片不會被分配內(nèi)存空間,長度和容量都是零,零值切片也可以說是 nil 切片。例如:
var s []string
fmt.Println(s == nil)  // 輸出 "true"
  • 空切片:空切片的長度和容量也都是零,但是指向了一個真實的、雖然是空的,但已經(jīng)分配了內(nèi)存的數(shù)組??涨衅梢酝ㄟ^ make 函數(shù)或者字面量語法來創(chuàng)建。例如:
s := make([]string, 0)
fmt.Println(s == nil)  // 輸出 "false"
s := []string{}
fmt.Println(s == nil)  // 輸出 "false"

在這兩個例子中,s 都是空切片,長度和容量都是零,但是值不是 nil。

零值切片和空切片在大多數(shù)情況下是可以互換使用的,都可以用來表示一個空的集合。但是如果需要區(qū)分一個切片是否被顯式初始化過,就需要注意它們的區(qū)別了。而 encoding/json 庫對兩者的處理方式就是不一樣的,會將零值切片編碼為“null”,而將空切片編碼為 “[]”。這可能會在某些情況下引發(fā)問題,例如當接口對于數(shù)組的處理期望"[]"而非"null"時。

講解到這里,相信大家已經(jīng)知道本文題目的答案了,如果將空的切片轉(zhuǎn)化為 JSON 格式后預(yù)期得到“[]”,就需要在聲明切片時,使用 make 函數(shù)或者字面量語法來創(chuàng)建切片。看個簡單的示例:

package main
import (
	"encoding/json"
	"fmt"
)
func main() {
	res := make([]string, 0)
	// 或者 res:= []string{}
	// 而非 var res []string
	b, err := json.Marshal(res)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(b))
}

運行代碼看下效果:

$ go run main.go
[]

可以看出,達到了預(yù)期的效果。

小結(jié)

本文講解了零值切片(nil 切片)和空切片的定義和差異,如果想將空的切片轉(zhuǎn)化為 JSON 格式后得到 “[]”而不是“null”,最好的方式是使用 make 函數(shù)或者字面量語法來創(chuàng)建切片。

以上就是Golang中空的切片轉(zhuǎn)化成 JSON 后變?yōu)?null 的問題的解決方案的詳細內(nèi)容,更多關(guān)于GolangJSON變?yōu)?null的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • gorm 結(jié)構(gòu)體中 binding 和 msg 結(jié)構(gòu)體標簽示例詳解

    gorm 結(jié)構(gòu)體中 binding 和 msg 結(jié)構(gòu)體標簽示例詳解

    文章介紹了Gin框架中binding和msg結(jié)構(gòu)體標簽的使用,包括基本用法、常用驗證規(guī)則、自定義驗證器、錯誤信息自定義、控制器使用示例、組合驗證規(guī)則、跨字段驗證和初始化驗證器等,這些標簽主要用于數(shù)據(jù)驗證、自定義錯誤信息、參數(shù)綁定和表單驗證
    2024-11-11
  • Go語言實現(xiàn)Fibonacci數(shù)列的方法

    Go語言實現(xiàn)Fibonacci數(shù)列的方法

    這篇文章主要介紹了Go語言實現(xiàn)Fibonacci數(shù)列的方法,實例分析了使用遞歸和不使用遞歸兩種技巧,并對算法的效率進行了對比,需要的朋友可以參考下
    2015-02-02
  • GO語言基礎(chǔ)入門第一個go程序解讀

    GO語言基礎(chǔ)入門第一個go程序解讀

    這篇文章主要為大家介紹了GO語言基礎(chǔ)入門的第一個go程序解讀,下面來帶大家進入Go語言世界helloworld的大門吧,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • golang實現(xiàn)一個簡單的websocket聊天室功能

    golang實現(xiàn)一個簡單的websocket聊天室功能

    這篇文章主要介紹了golang實現(xiàn)一個簡單的websocket聊天室功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • golang?db事務(wù)的統(tǒng)一封裝的實現(xiàn)

    golang?db事務(wù)的統(tǒng)一封裝的實現(xiàn)

    這篇文章主要介紹了golang db事務(wù)的統(tǒng)一封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go基礎(chǔ)教程系列之數(shù)據(jù)類型詳細說明

    Go基礎(chǔ)教程系列之數(shù)據(jù)類型詳細說明

    這篇文章主要介紹了Go基礎(chǔ)教程系列之數(shù)據(jù)類型詳細說明,需要的朋友可以參考下
    2022-04-04
  • Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)

    Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)

    這篇文章主要介紹了Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • GoLang中Json?Tag用法實例總結(jié)

    GoLang中Json?Tag用法實例總結(jié)

    這篇文章主要給大家介紹了關(guān)于GoLang中Json?Tag用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • 阿里云go開發(fā)環(huán)境搭建過程

    阿里云go開發(fā)環(huán)境搭建過程

    這篇文章主要介紹了阿里云go開發(fā)環(huán)境搭建過程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Go語言中兩個比較流行的緩存庫使用示例

    Go語言中兩個比較流行的緩存庫使用示例

    緩存是計算機科學(xué)中的一個重要概念,設(shè)想某個組件需要訪問外部資源,它向外部源請求資源,接收并使用資源,這些步驟都需要花費時間,下面這篇文章主要給大家介紹了關(guān)于Go語言中兩個比較流行的緩存庫使用的相關(guān)資料,需要的朋友可以參考下
    2024-04-04

最新評論