原创 用etcd實現服務註冊和發現

系統中實現服務註冊與發現所需的基本功能有服務註冊:同一service的所有節點註冊到相同目錄下,節點啓動後將自己的信息註冊到所屬服務的目錄中。健康檢查:服務節點定時發送心跳,註冊到服務目錄中的信息設置一個較短的TTL,運行正常的服務節點每隔

原创 golang etcd簡明教程

etcd 是一個高可用強一致性的鍵值倉庫在很多分佈式系統架構中得到了廣泛的應用,本教程結合一些簡單的例子介紹golang版本的etcd/clientv3中提供的主要功能及其使用方法。如果還不熟悉etcd推薦先閱讀:看圖輕鬆瞭解etcdetc

原创 etcd常用操作介紹

安裝最簡單的安裝方法是直接去etcd GitHub的Release頁下載預編譯好的二進制文件。etcd官方爲各個系統提供了不同的二進制文件,供開發者根據自己的系統去下載。下載地址:https://github.com/etcd-io/et.

原创 Go如何對數組切片進行去重

Go標準庫本身沒有提供一個去除slice中重複元素的函數,需要自己去實現。下面提供一種實現思路,如果有更好的實現方法歡迎留言討論。package main import ( "fmt" ) func main() { s

原创 爲什麼Go中有的自定義error會導致內存溢出

分享一個在go tour上看到的練習題,練習裏要求用戶自己定義一個錯誤類型,實現error接口,函數在參數不滿足條件的時候返回自定義的錯誤類型的值。練習中特別提示用戶不要在實現的Error方法裏直接使用fmt.Sprint(e)以避免造成程

原创 Go中數字轉換字符串的正確姿勢

在許多語言中,你可以輕鬆地將任何數據類型轉換爲字符串,只需將其與字符串連接,或者使用類型轉換表達式即可。但是,如果你在Go中嘗試執行似乎很明顯的操作(例如將int轉換爲字符串),你不太可能獲得預期的效果。比如下面:string(120)你期

原创 用Golang構建gRPC服務

本教程提供了Go使用gRPC的基礎教程在教程中你將會學到如何:在.proto文件中定義一個服務。使用protocol buffer編譯器生成客戶端和服務端代碼。使用gRPC的Go API爲你的服務寫一個客戶端和服務器。繼續之前,請確保你已經

原创 分佈式服務框架gRPC

什麼是gRPCgRPC是Google開發的高性能、通用的開源RPC框架,其由Google主要面向移動應用開發並基於HTTP/2協議標準而設計,基於Protobuf(Protocol Buffers)序列化協議開發,且支持衆多開發語言。在gR

原创 Protobuf編碼指南

這個文檔會介紹protocol buffer的二進制有線格式(binary wire format)。你並不是需要理解這些後才能在應用裏使用protocol buffer,但是當你想知道不同的protocol buffer格式是如何影響編碼

原创 詳解varint編碼原理

什麼是Varint編碼Varint是一種使用一個或多個字節序列化整數的方法,會把整數編碼爲變長字節。對於32位整型數據經過Varint編碼後需要1~5個字節,小的數字使用1個byte,大的數字使用5個bytes。64位整型數據編碼後佔用1~

原创 在Golang中使用Protobuf

本教程使用proto3版本的protocol buffer語言,提供了一個基本的在Go程序中使用protocol buffer的介紹。通過創建一個簡單的示例應用程序,向你展示如何在.proto文件中定義消息格式。使用protoc編譯器編譯生

原创 Protobuf生成Go代碼指南

這個教程中將會描述protocol buffer編譯器通過給定的.proto會編譯生成什麼Go代碼。教程針對的是proto3版本的protobuf。在閱讀之前確保你已經閱讀過Protobuf語言指南。編譯器調用Protobuf核心的工具集是

原创 教你如何做出自己想要的PHP Docker鏡像

之前有片文章講過如何通過Docker來構建Laravel的開發環境,其實變通一下就能夠在本地電腦上用Docker運行任何PHP項目,讓任何PHP項目都能運行在Docker環境中主要是需要根據PHP項目的依賴製作PHP鏡像的Dockerfil

原创 Redis的應用場景

Redis應用場景Redis作爲一個非關係型數據庫,除了在訪問速度上擁有顯著優勢外,其本身支持的多種數據類型也非常有用,能覆蓋系統開發中的很多應用場景。下面列舉的場景有的是從網上其他人的博客裏看到的,有的自己開發時嘗試過的一些解決方案後記錄

原创 細說Golang的JSON解析

之前一直寫一些動態語言,覺得解析JOSN還是很簡單的,往往只需要幾行代碼就能拿到解析好的JSON對象。Go語言自帶的json包可以讓你在程序中方便的讀取和寫入 JSON 數據。生成JSON場景相對簡單一些,json.Marshal()會根據