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

Golang 中 omitempty的作用

 更新時間:2022年07月15日 09:15:59   作者:? 凡森Zfans  ?  
這篇文章主要介紹了Golang 中 omitempty的作用,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考一下,需要的小伙伴可以參考一下

前言

在嘗試將結(jié)構(gòu)體序列化為 Json 時,你可能會遇到 “omitempty” 標記,本小記就來淺看一下它如何起作用。

先上結(jié)論:

  • 基本類型的默認值會被 omit,除了數(shù)組。
  • 指針類型為 nil 時會被 omit。

Talk is cheap. Show me the code.

package main
import (
   "encoding/json"
   "errors"
   "fmt"
)
type TestNotOmitEmpty struct {
   Uint8   uint8   `json:"uint8"`
   Uint16  uint16  `json:"uint16"`
   Uint32  uint32  `json:"uint32"`
   Uint64  uint64  `json:"uint64"`
   Int8    int8    `json:"int8"`
   Int16   int16   `json:"int16"`
   Int32   int32   `json:"int32"`
   Int64   int64   `json:"int64"`
   Int     int     `json:"int"`
   Float32 float32 `json:"float32"`
   Float64 float64 `json:"float64"`
   // Complex64     complex64      `json:"complex64"` // json: unsupported type
   // Complex128    complex128     `json:"complex128"` // json: unsupported type
   Byte          byte           `json:"byte"`
   Rune          rune           `json:"rune"`
   Uintptr       uintptr        `json:"uintptr"`
   String        string         `json:"string"`
   StringPointer *string        `json:"stringPointer"`
   Array         [10]int        `json:"array"`
   Slice         []int          `json:"slice"`
   Map           map[int]string `json:"map"`
   // Channel       chan int       `json:"channel"` // json: unsupported type
   Interface interface{} `json:"interface"`
   Error     error       `json:"error"`
}

type TestOmitEmptyWithDefaultValue struct {
   Uint8   uint8   `json:"uint8,omitempty"`
   Uint16  uint16  `json:"uint16,omitempty"`
   Uint32  uint32  `json:"uint32,omitempty"`
   Uint64  uint64  `json:"uint64,omitempty"`
   Int8    int8    `json:"int8,omitempty"`
   Int16   int16   `json:"int16,omitempty"`
   Int32   int32   `json:"int32,omitempty"`
   Int64   int64   `json:"int64,omitempty"`
   Int     int     `json:"int,omitempty"`
   Float32 float32 `json:"float32,omitempty"`
   Float64 float64 `json:"float64,omitempty"`
   // Complex64     complex64      `json:"complex64,omitempty"` // json: unsupported type
   // Complex128    complex128     `json:"complex128,omitempty"` // json: unsupported type
   Byte          byte           `json:"byte,omitempty"`
   Rune          rune           `json:"rune,omitempty"`
   Uintptr       uintptr        `json:"uintptr,omitempty"`
   String        string         `json:"string,omitempty"`
   StringPointer *string        `json:"stringPointer,omitempty"`
   Array         [10]int        `json:"array,omitempty"`
   Slice         []int          `json:"slice,omitempty"`
   Map           map[int]string `json:"map,omitempty"`
   // Channel       chan int       `json:"channel,omitempty"` // json: unsupported type
   Interface interface{} `json:"interface,omitempty"`
   Error     error       `json:"error,omitempty"`
}

func ToStringPointer(s string) *string {
   return &s
}

func main() {
   testOmitEmpty := TestNotOmitEmpty{}
   jsonData, err := json.Marshal(testOmitEmpty)

   if err != nil {
      println(err)
      panic(err)
   }
   fmt.Printf("TestNotOmitEmpty: %s\n", jsonData)
   testOmitEmptyWithDefaultValue := TestOmitEmptyWithDefaultValue{}
   jsonData2, err := json.Marshal(testOmitEmptyWithDefaultValue)
   if err != nil {
      println(err)
      panic(err)
   }

   fmt.Printf("TestOmitEmptyWithDefaultValue: %s\n", jsonData2)

   testOmitEmptyWithDefaultValueButFatherSet := TestOmitEmptyWithDefaultValue{
      Uint8:         0,
      Uint16:        0,
      Uint32:        0,
      Uint64:        0,
      Int8:          0,
      Int16:         0,
      Int32:         0,
      Int64:         0,
      Int:           0,
      Float32:       0,
      Float64:       0,
      Byte:          0,
      Rune:          0,
      Uintptr:       0,
      String:        "",
      StringPointer: nil,
      Array:         [10]int{},
      Slice:         nil,
      Map:           nil,
      Interface:     nil,
      Error:         nil,
   }
   jsonData3, err := json.Marshal(testOmitEmptyWithDefaultValueButFatherSet)

   if err != nil {
      println(err)
      panic(err)
   }
   fmt.Printf("testOmitEmptyWithDefaultValueButFatherSet: %s\n", jsonData3)

   testOmitEmptyWithNotDefaultValueButFatherSet := TestOmitEmptyWithDefaultValue{
      Uint8:         1,
      Uint16:        1,
      Uint32:        1,
      Uint64:        1,
      Int8:          1,
      Int16:         1,
      Int32:         1,
      Int64:         1,
      Int:           1,
      Float32:       1,
      Float64:       1,
      Byte:          1,
      Rune:          1,
      Uintptr:       1,
      String:        "1",
      StringPointer: ToStringPointer(""),
      Array:         [10]int{1},
      Slice:         []int{1},
      Map:           map[int]string{1: "1"},
      Interface:     "1",
      Error:         errors.New("error"),
   }
   jsonData4, err := json.Marshal(testOmitEmptyWithNotDefaultValueButFatherSet)

   if err != nil {
      println(err)
      panic(err)
   }
   fmt.Printf("testOmitEmptyWithNotDefaultValueButFatherSet: %s\n", jsonData4)
}

TestNotOmitEmpty

全部序列化成功。

TestOmitEmptyWithDefaultValue

默認值全軍覆沒,除了數(shù)組。

testOmitEmptyWithDefaultValueButFatherSet

自己設(shè)置的默認值也全軍覆沒,除了數(shù)組。

testOmitEmptyWithNotDefaultValueButFatherSet

非默認值當然不會被省略了。

到此這篇關(guān)于Golang 中 omitempty的作用的文章就介紹到這了,更多相關(guān)Golang omitempty內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • golang?channel管道使用示例解析

    golang?channel管道使用示例解析

    這篇文章主要介紹了golang?channel管道使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go語言多人聊天室項目實戰(zhàn)

    Go語言多人聊天室項目實戰(zhàn)

    這篇文章主要為大家詳細介紹了Go語言多人聊天室項目實戰(zhàn),實現(xiàn)單撩或多撩等多種功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Go項目分層下的最佳error處理方式分享

    Go項目分層下的最佳error處理方式分享

    這篇文章主要來和大家一起探討?Go?項目分層下的最佳?error?處理方式,準備好了嗎?準備一杯你最喜歡的飲料或茶,隨著本文一探究竟吧
    2023-06-06
  • Go語言中調(diào)用外部命令的方法總結(jié)

    Go語言中調(diào)用外部命令的方法總結(jié)

    在工作中,我們時不時地會需要在Go中調(diào)用外部命令。本文為大家總結(jié)了Go語言中調(diào)用外部命令的幾種姿勢,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-11-11
  • go json轉(zhuǎn)換實踐中遇到的坑

    go json轉(zhuǎn)換實踐中遇到的坑

    在使用 go 語言開發(fā)過程中,經(jīng)常需要使用到 json 包來進行 json 和 struct 的互相轉(zhuǎn)換,這篇文章主要介紹了go json轉(zhuǎn)換實踐中遇到的坑,非常具有實用價值,需要的朋友可以參考下
    2018-12-12
  • golang如何自定義json序列化應用詳解

    golang如何自定義json序列化應用詳解

    son格式可以算我們?nèi)粘W畛S玫男蛄谢袷街涣?,下面這篇文章主要給大家介紹了關(guān)于golang如何自定義json序列化應用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧
    2018-08-08
  • go 代碼格式化和風格開發(fā)者指南

    go 代碼格式化和風格開發(fā)者指南

    這篇文章主要為大家介紹了go 代碼格式化和風格開發(fā)者指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Go語言常見錯誤之誤用init函數(shù)實例解析

    Go語言常見錯誤之誤用init函數(shù)實例解析

    Go語言中的init函數(shù)為開發(fā)者提供了一種在程序正式運行前初始化包級變量的機制,然而,由于init函數(shù)的特殊性,不當?shù)厥褂盟赡芤鹨幌盗袉栴},本文將深入探討如何有效地使用init函數(shù),列舉常見誤用并提供相應的避免策略
    2024-01-01
  • 詳解Go語言中make和new的區(qū)別

    詳解Go語言中make和new的區(qū)別

    Go語言中,有兩個比較雷同的內(nèi)置函數(shù),分別是new和make方法,那他們有什么區(qū)別呢?本文將通過一些示例為大家詳細介紹一下,感興趣的可以了解一下
    2023-02-02
  • 基于Go和Gin的環(huán)境配置方法

    基于Go和Gin的環(huán)境配置方法

    今天小編就為大家分享一篇基于Go和Gin的環(huán)境配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論