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

Go語言設(shè)置JSON的默認值操作

 更新時間:2020年12月24日 11:14:23   作者:小人物大青春  
這篇文章主要介紹了Go語言設(shè)置JSON的默認值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

給需要設(shè)置的JSON字段初試化你想設(shè)置的值就OK。

比如我想讓[]string類型的字段的默認值是[],而不是nil,那我就make([]string, 0)賦值給該字段。

轉(zhuǎn)成JSON輸出后,就是[]。

1. 示例代碼

這是沒有初始化的代碼。默認值是nil。

package main
import (
 "encoding/json"
 "fmt"
 "net"
 "net/http"
)
type JsonTest struct {
 Test1  string   `json:"test1"`
 Test2  []string  `json:"test2"`
}
//定義自己的路由器
type MyMux1 struct {
}
//實現(xiàn)http.Handler這個接口的唯一方法
func (mux *MyMux1) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 urlPath := r.URL.Path
 switch urlPath {
 case "/test":
 mux.testJson(w, r)
 default:
 http.Error(w, "沒有此url路徑", http.StatusBadRequest)
 }
}
func (mux *MyMux1) testJson(w http.ResponseWriter, r *http.Request) {
 if r.Method != "GET" {
 http.Error(w, "the method is not allowed", http.StatusMethodNotAllowed)
 }
 jsontest := &JsonTest{}
 //只初始化Test1字段
 jsontest.Test1 = "value1"
 
 jsondata,_ := json.Marshal(jsontest)
 w.Header().Set("Content-Type", "application/json")
 fmt.Fprintf(w, "%s", jsondata)
}
func main() {
 //實例化路由器Handler
 mymux := &MyMux1{}
 //基于TCP服務(wù)監(jiān)聽8088端口
 ln, err := net.Listen("tcp", ":8089")
 if err != nil {
 fmt.Printf("設(shè)置監(jiān)聽端口出錯...")
 }
 //調(diào)用http.Serve(l net.Listener, handler Handler)方法,啟動監(jiān)聽
 err1 := http.Serve(ln, mymux)
 if err1 != nil {
 fmt.Printf("啟動監(jiān)聽出錯")
 }
}

示例結(jié)果如下圖1所示,字段Test2的默認值是nil。

以下是對[]string字段初始化的代碼。默認輸出值是[]。

func (mux *MyMux1) testJson(w http.ResponseWriter, r *http.Request) {
 if r.Method != "GET" {
 http.Error(w, "the method is not allowed", http.StatusMethodNotAllowed)
 }
 jsontest := &JsonTest{}
 jsontest.Test1 = "value1"
 jsontest.Test2 = make([]string, 0)
 jsondata,_ := json.Marshal(jsontest)
 w.Header().Set("Content-Type", "application/json")
 fmt.Fprintf(w, "%s", jsondata)
}

示例結(jié)果如下圖2所示。

2. 示例結(jié)果

3. 總結(jié)

其他字段想要設(shè)置默認輸出值,只需要對其進行相應(yīng)的初始化即可。

補充:golang json Unmarshal的時候,在key為空的時候給予默認值

我就廢話不多說了,大家還是直接看代碼吧~

package main
import (
 "fmt"
 "encoding/json"
)
type Test struct {
 A string
 B int
 C string
}
func (t *Test) UnmarshalJSON(data []byte) error {
 type testAlias Test
 test := &testAlias{
 A: "default A",
 B: -2,
 }
 _ = json.Unmarshal(data, test)
 *t = Test(*test)
 return nil
}
var example []byte = []byte(`[{"A": "1", "C": "3"}, {"A": "4", "B": 2}, {"C": "5"}]`)
func main() {
  out := &[]Test{}
  _ = json.Unmarshal(example, &out)
  fmt.Print(out)
}

結(jié)果

&[{1 -2 3} {4 2 } {default A -2 5}]

可以看到 在key沒有的情況下可以指定對應(yīng)的值,這樣就可以了。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • golang使用go test輸出單元測試覆蓋率的方式

    golang使用go test輸出單元測試覆蓋率的方式

    單元測試覆蓋率是衡量代碼質(zhì)量的一個重要指標(biāo),重要的代碼文件覆蓋率應(yīng)該至少達到80%以上,Java 可以通過JaCoCo 統(tǒng)計覆蓋率,那么go 項目如何進行代碼覆蓋率測試呢,本文將給大家詳細的介紹一下golang使用go test輸出單元測試覆蓋率的方式,需要的朋友可以參考下
    2024-02-02
  • go特性之?dāng)?shù)組與切片的問題

    go特性之?dāng)?shù)組與切片的問題

    這篇文章主要介紹了go特性之?dāng)?shù)組與切片的問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • golang gorm 操作mysql及gorm基本用法

    golang gorm 操作mysql及gorm基本用法

    golang 官方的那個操作mysql的有點麻煩所以就使用了gorm,下面就gorm的使用做下簡單介紹,感興趣的朋友跟隨小編一起看看吧
    2018-11-11
  • 一文了解Go語言中的函數(shù)與方法的用法

    一文了解Go語言中的函數(shù)與方法的用法

    與大部分語言一致,Go語言中的函數(shù)與方法定義與其他語言基本一致,但也有一定的差別。本文將通過示例詳細講講Go語言中函數(shù)與方法的用法,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • golang對etcd存取和數(shù)值監(jiān)測的實現(xiàn)

    golang對etcd存取和數(shù)值監(jiān)測的實現(xiàn)

    這篇文章主要介紹了golang對etcd存取和數(shù)值監(jiān)測的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Golang中List的實現(xiàn)方法示例詳解

    Golang中List的實現(xiàn)方法示例詳解

    最近決定復(fù)習(xí)下Go,所以下面這篇文章主要給大家介紹了關(guān)于Golang中List的實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • golang實現(xiàn)aes-cbc-256加密解密功能

    golang實現(xiàn)aes-cbc-256加密解密功能

    這篇文章主要介紹了golang實現(xiàn)aes-cbc-256加密解密功能,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • go語言單例模式(Singleton)實例分析

    go語言單例模式(Singleton)實例分析

    這篇文章主要介紹了go語言單例模式(Singleton),實例分析了單例模式的原理與Go語言的實現(xiàn)技巧,需要的朋友可以參考下
    2015-03-03
  • Golang中for循環(huán)遍歷避坑指南

    Golang中for循環(huán)遍歷避坑指南

    這篇文章主要為大家詳細介紹了Golang中for循環(huán)遍歷會出現(xiàn)的一些小坑以及對應(yīng)的解決辦法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2023-05-05
  • golang 生成二維碼海報的實現(xiàn)代碼

    golang 生成二維碼海報的實現(xiàn)代碼

    這篇文章主要介紹了golang 生成二維碼海報的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論