原创 Base64 Encoding詳解

前言 Base64是由64個字符的字母表定義的基數爲64的編碼/解碼方案,可以將二進制數據轉換爲字符傳輸,是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一。注意:採用Base64編碼具有不可讀性,需要解碼後才能閱讀。 目前Ba

原创 golang struct json tag的使用及深入理解

一、sturct json tag的使用 1.tag格式說明 struct json tag主要在struct與json數據轉換的過程(Marshal/Unmarshal)中使用。 json的tag格式如下: Key type

原创 golang RSA祕鑰的解析方式總結

文章目錄前言解析方式1. 字符串格式(1)公鑰(2)私鑰2. 證書文件格式(1).pem、.cert、.cer、.crt(2).pkcs12、.pfx、.p123. N,E參數總結 前言 加密、解密、簽名、驗籤等操作總少不了對祕

原创 gracehttp優雅重啓Go服務詳解

文章目錄前言使用方法(1)獲取(2)使用(3)重啓命令源碼解析啓動服務具體服務啓動過程Serve總入口ConnState注入hookmanage管理各種chan信號的處理系統信號監聽waitsignalHandler關閉服務啓動新

原创 influxDB 2.0安裝及使用說明

目前influxdb2.0還處於beta階段,網上的相關資料較少,根據自己的使用過程,特別整理此說明文檔。 文章目錄一、安裝1.下載2.解壓3.設置環境變量(可選)二、啓動1.啓動命令2.初次使用設置(1)使用UI界面設置(2)使

原创 zap——細節拾遺

前言 我們在之前的篇章中主要按照幾個核心使用點進行源碼的分析,有些細節未能覆蓋到,因此特意對使用時可能需要注意的細節,特意說明下。 1.輸出的日誌信息內容的具體順序問題 先說結論,先後順序爲: Level-Time-LoggerN

原创 zap——SugaredLogger

SugaredLogger // A SugaredLogger wraps the base Logger functionality in a slower, but less // verbose, API. Any Log

原创 zap——從示例開始看源碼

zap是uber開發的一個基於go語言的log模塊,主打就是快、結構化、日誌級別。 使用 官方示例 1.追求性能,類型要求不嚴格的使用SugaredLogger logger, _ := zap.NewProduction() d

原创 zap——Logger的設計思路

前言 之前的一系列文章中主要追蹤的是代碼的執行邏輯和處理思路,進而熟悉代碼,加深理解及使用。但是zap爲什麼快?它是怎麼設計的?在熟悉代碼後,再回頭看看zap的設計思路,看看能否解答之前的一些疑惑。 設計思路 zap README

原创 zap——從Config自定義日誌格式

前言 我們依然從官方示例開始: logger, _ := zap.NewProduction() ... NewProduction的代碼如下: func NewProduction(options ...Option) (*L

原创 關於golang flag的理解

一、說明 flag主要用以命令行工具的參數獲取,如服務或工具有需要啓動時傳入不同的配置,則會用到flag。 二、使用 一般使用方法: (1)聲明變量並綁定 有兩種方式: ①Var形式 var ( _para1 string

原创 zap——logger的創建及logger的使用過程

文章目錄根據Conifg創建LoggerbuildEncoderopenSinksCombineWriteSyncerslog的使用check levelWirteEncodeEntryc.out.WriteSync總結 根據Co

原创 golang中常用的加/解密、簽名/驗籤方式的進一步封裝方案

前言 我在前文golang中關於RSA加密、解密、簽名、驗籤的通用處理方式中初步封裝了一個RSA相關的加/解密、簽名/驗籤的通用處理方案,也提到了進一步封裝更多加解密方式可能,此次就特意添加了針對DES、AES、HMAC、HASH

原创 關於PKCS5Padding與PKCS7Padding的理解

前言 在採用AES、DES等塊加密時,有時需要對不滿足一個整塊(block)的部分需要進行填充,我們常用的填充的方式就包括ZeroPadding、PKCS5Padding與PKCS7Padding,這裏面有什麼區別呢。 填充方式的

原创 golang db事務的統一封裝

事務處理的流程示例 database := db.DB tx, err := database.Begin() if err != nil { return err } st