天天看點

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

1 Go的枚舉

1.1 定義常數實作枚舉

◆ 類型别名的形式來聲明類型

◆ iota來自增和自動指派

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

顯然輸出為2

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

這樣亦可.

1.2 何時可用iota ,何時又不可用iota呢?

◆ 無狀态且非持久化,可以使用iota

◆ 有狀态或者需要持久化,不能使用iota

1.3 顯式iota定義

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

定義好之後,值不可再改變!

2 在Go中如何使用JSON

2.1 标準庫内建的JSON包

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

預設使用的JSON字段名稱是它的Field名稱

2.2 并非任何類型都可序列化

◆ 支援string、 bool、 數字類型、數組和切片、結構體、map

◆ Channel、complex、 function 類型無法進行json序列化

◆ 結構體中的循環資料結構,序列化時不會被處理

2.3 結構體中自定義字段名稱

◆ JSON tag key : name,[omitempty,-]

◆ [string]标記 , 定義bool,浮點,整數類型使用字元串編碼

◆ 臨時添加字段:内嵌結構體,合并多個結構體

2.3.1 序列化示範

  • demo代碼-json.go
Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

運作結果

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

對name進行自定義

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

可以發現age無法實作序列化導出,将其改為大寫即可

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

其中的omitempty可以過濾空值(包括0),于是結果中不再包含age資訊

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

有-不會序列化

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

去除-即可

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

整型加上string會以字元串形式序列化

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

2.3.2 反序列化示範

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

無法序列化id,是以要求json一定要與結構體中資料類型保持一緻

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置

2.4 高性能JSON庫 - jsoniter [json-iterator]

◆ 快,并且更快

◆ 支援java和go

◆ 百分百相容JSON标準庫, 一行代碼遷移到jsoniter

◆ 安裝: go get github.com/json-iterator/go

3 config 配置

3.1 分類标準

内容

靜态和動态

環境

開發、測試、灰階、生産

形式

本地檔案和分布式服務

格式

ini > properties > yaml > toml > xml > json(推薦度排序)

用途 - 程式/應用級别

◆ 配置檔案命名規範

字首+[-_ ]+功能

◆ 程式級别

可以不分組,比如: boot.ini,config.ini

◆ 應用級别分組

比如app-mysql.properties

環境來變量化配置項

◆ 不同環境使用不同的配置檔案

◆ 變量化因環境不同的可變配置項

3.2 統一配置工具庫 - props 設計

◆ 各種配置源抽象或轉換為key/value結構

◆ 支援prop,ini,zk,consul.etcd,nacos

◆ 支援unmarshal

◆ props配置用戶端工具庫加持+ INI格式

◆ INI檔案由節、鍵、值組成

◆ INI格式三要素 :節、參數(key/value)、注釋

◆ section :方括号包圍,比如: [mysql]

◆ 參數: key=value ,有些工具支援冒号分割

◆ 注釋,使用;,有些編輯器和工具支援#

◆ Section作為分組

◆ props配置用戶端使用完整的key來解釋

◆ 完整的key由Section和參數key組成 , .分割

Go實戰搶紅包系統(四) - 基礎實施層coding(上)1 Go的枚舉2 在Go中如何使用JSON3 config 配置