最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)實標(biāo)題中這種情況的切片就是零值切片,接下來介紹下零值切片和空切片。

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

  1. 零值切片:當(dāng)一個切片類型的變量被聲明但沒有被顯式初始化時,它的值就是一個零值切片。零值切片不會被分配內(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ā)問題,例如當(dāng)接口對于數(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
[]

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

小結(jié)

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

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

相關(guān)文章

  • Golang詳細(xì)講解常用Http庫及Gin框架的應(yīng)用

    Golang詳細(xì)講解常用Http庫及Gin框架的應(yīng)用

    下面這篇文章主要給大家介紹了關(guān)于Golang常用的Http庫及Gin框架,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • GoLang?channel底層代碼分析詳解

    GoLang?channel底層代碼分析詳解

    Channel和goroutine的結(jié)合是Go并發(fā)編程的大殺器。而Channel的實際應(yīng)用也經(jīng)常讓人眼前一亮,通過與select,cancel,timer等結(jié)合,它能實現(xiàn)各種各樣的功能。接下來,我們就要梳理一下GoLang?channel底層代碼實現(xiàn)
    2022-10-10
  • go語言入門環(huán)境搭建及GoLand安裝教程詳解

    go語言入門環(huán)境搭建及GoLand安裝教程詳解

    這篇文章主要介紹了go語言入門環(huán)境搭建及GoLand安裝教程詳解,需要的朋友可以參考下
    2020-12-12
  • golang copy函數(shù)使用的坑

    golang copy函數(shù)使用的坑

    本文主要介紹了golang copy函數(shù)使用的坑,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 深入理解Go中defer的機(jī)制

    深入理解Go中defer的機(jī)制

    本文主要介紹了Go中defer的機(jī)制,包括執(zhí)行順序、參數(shù)預(yù)計算、閉包和與返回值的交互,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • Go語言實現(xiàn)控制臺輸入&生成隨機(jī)數(shù)詳解

    Go語言實現(xiàn)控制臺輸入&生成隨機(jī)數(shù)詳解

    這篇文章主要介紹了Go語言如何實現(xiàn)控制臺輸入&生成隨機(jī)數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Go中的新增對模糊測試的支持

    Go中的新增對模糊測試的支持

    這篇文章主要為大家介紹了Go中的新增對模糊測試的支持,文中還包含了一些功能實驗性測試分析有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • Golang實現(xiàn)簡易的命令行功能

    Golang實現(xiàn)簡易的命令行功能

    這篇文章主要為大家詳細(xì)介紹了如何通過Golang實現(xiàn)一個簡易的命令行功能,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的可以了解一下
    2023-02-02
  • Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    這篇文章主要為大家介紹了Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Go os/exec使用方式實踐

    Go os/exec使用方式實踐

    這篇文章主要介紹了Go os/exec使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-07-07

最新評論

龙游县| 开远市| 松江区| 定安县| 凤山县| 乌兰察布市| 炎陵县| 上思县| 萍乡市| 衡阳市| 丹巴县| 嘉禾县| 无棣县| 石家庄市| 渝中区| 宜都市| 微山县| 河源市| 德化县| 舒城县| 龙南县| 嘉鱼县| 章丘市| 富源县| 西昌市| 邢台县| 永泰县| 朝阳市| 泰和县| 壶关县| 兴国县| 申扎县| 抚州市| 阿克陶县| 德令哈市| 阳朔县| 黑河市| 婺源县| 南漳县| 中方县| 宁蒗|