Time of Update: 2017-02-10
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。gRPC 預設提供了兩種認證方式:基於SSL/TLS認證方式遠程調用認證方式兩種方式可以混合使用TLS認證樣本這裡直接擴充hello項目,實現TLS認證機制首先需要準備認證,在hello目錄建立keys目錄用於存放認證檔案。認證製作製作私密金鑰 (.key)# Key considerations for algorithm "RSA" ≥ 2048-bitopenssl genrsa -out
Time of Update: 2017-02-10
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。一直以來,我都認為在 go 裡面 mock 是非常困難的。不像動態語言或者跑在 VM 上的語言,go 要求在開發的時候就給 mock 介入預留空間,不然測試的時候會不得其門而入。開發的時候需要頭疼的事情可多了,還要求再考慮下可測試性,真有點強人所難。另外第三方庫並不一定給 mock 預留空間,遇到這種情況只能乾瞪眼繞路走。很多時候,無法 mock
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。最近打算介紹go語言編寫的開源類庫架構分析,自己最開始使用go語言是做爬蟲的,採用的是gocrawl, gocrawl是一個使用go語言編寫的開源爬蟲類庫,今天來分析下gocrawl的實現。## 範例程式碼```package gocrawlimport ( "github.com/PuerkitoBio/goquery" "net/http" "regexp"
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。## methods on values or pointersfunc (s *MyStruct) pointerMethod() { } // method on pointerfunc (s MyStruct) valueMethod() { } // method on valuego語言為類型定義方法時有上述兩種方式,初學者很容易陷入迷惑中,這兩種定義方式有什麼區別?該如何選擇? ###
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。本文基於我在2月27日Gopher北京聚會演講整理而成,進行了一些補充以及調整。投稿給《高可用架構》公眾號首發。聊這個話題之前,先梳理下兩個概念,幾乎所有講並發的文章都要先講這兩個概念: 並發(concurrency)
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。在golang中可以使用time.Time資料類型來儲存mongodb中的ISODate時間。gtype聽Model聽struct聽{聽聽聽聽uploadDate聽time.Time聽`bson:"uploadDate"`}m聽:=聽Model{}if聽err聽:=聽c.Find(nil).Select({"_id":聽0,聽"uploadDate":聽1}).One(&m)
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。今天我們完結了這個strings的包,其實我們就剩下了type Reader和type Replacer這個我們之間講過io的包,這樣大家理解起來就比較省勁了!(1)func NewReader(s string) *Reader通過讀取一個字串之後返回Reader對象,然後實現io.Reader, io.ReaderAt, io.Seeker, io.ByteScanner, 和io.RuneScanner 介面import (
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Golang標準庫今天我們講golang標準庫的os包type File struct{},還是廢話少說直接上代碼(1)os.Create()這個函數是創見一個檔案,函數的原型是func Create(name string) (file *File, err error)輸入的是名稱字串類型,返回的是一個File的指標和一個error[php]import
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。布爾型:bool長度1位元組取值範圍:true,false注意:不可以用數字代表true或false整型:Int根據平台可能為32為或64位聽8位整型:int8/uint8長度:1位元組取值範圍:-127~127,0~255byte 位元組型 聽其實就是 uint8的別名 聽16位整型:int16/uint16長度:2位元組取值範圍:-32768~32768,0~65535
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1.struct 簡潔這個的struct和C語言的很相似,類比出class的功能,但是不完全的!沒有建構函式等!2.struct的申明[php]package mainimport "fmt"type Person struct {Age intName string}func main() {//初始化兩種a := Person{}a.Age = 2a.Name =
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。今天做訊息佇列持久化儲存服務過程中,golang操作mysql 報錯:panic:聽runtime error:聽invalid memory address or nil pointer dereference聽[經過反覆尋找,原來是變數定義問題 做個記錄,以後再有問題可以做個參考,原始代碼:var聽Db聽*sql.DBfunc聽init()聽{聽聽聽聽Db,聽err聽:=聽sql.Open("mysql",聽&
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。切片slice是參考型別 len()函數擷取元素的個數 cap()擷取數組的容量1.申明方式[php](1)var a []int 與數組不同的是他不申明長度(2)s2 := make([]int, 3, 10) //元素的類型,元素的數量,元素的容量 fmt.Println(len(s2), cap(s2)) 輸出元素的數量和容量[/php]2.講數群組轉換成切片[php]a :=
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1.申明一個數組 var a[2] int 或者 a:=[2]int{1,2}2.數組索引數組就是索引的來建立如我們再來一個測試3.go語言可以自動計算數組的長度,譬如你知道數組有幾個可以如下申明[php]a:=[…]int{1,2,3,45}[/php]4.指標數組[php]a:=[3]int{1,2,3}var p * [3]int = &a //這種是指標數組 我們看到可以直接輸出指向數組的指標x , y :=1 ,
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1.匯入包,一個主函數中只有一個main函數,包含一個main包,主函數中我們要申明main的包![php]package mainfunc main(){}[/php]2.引入包檔案,譬如我們使用的是fmt包,列印helloword用,golang有一個包可見度的定義,就譬如其他語言中的private
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。聽 聽 反射是在golang程式運行時檢查變數所具有類型的一種機制。由於反射可以得出關於變數結構的資料(即“關於資料的資料”),所以這也被認為是golang元編程的基礎。初學反射,會感覺有些“玄乎”。我這裡由淺入深,嘗試闡述反射內涵,並解讀反射三法則(http://blog.golang.org/laws-of-reflection)。0 從類型和方法理解反射內涵聽 聽
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package util import ( "regexp" "strconv" "strings") //表情解碼func UnicodeEmojiDecode(s string) string { //emoji表情的日期運算式 re := regexp.MustCompile("\\[[\\\\u0-9a-zA-Z]+\\]") //提取emoji日期運算式 reg :=
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package聽utilimport聽("encoding/base64""errors")func聽Base64Encode(deText聽[]byte)聽[]byte聽{return聽[]byte(base64.StdEncoding.EncodeToString(deText))}func聽Base64Decode(enText聽[]byte)聽([]byte,聽error)聽{deText,
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。聽 聽 目前,golang還不支援模板函數(型別參數化),所以看上去不得不為每一種類型都實現一個函數。但是Golang可以利用空介面interface{}和閉包/高階函數來實現泛型函數。1 空介面聽 聽