Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。前言parser package 包含了 golang 文法分析相關的資料結構和方法,原始碼位於 <go-src>/src/go/parser之前大概看了點 PHP 和 Ruby 的原始碼,感歎 go 確實如宣傳的一樣,簡潔如 C,parser.go 代碼總共 幾千行(Ruby 文法規則定義檔案有 1w 多行),使用遞迴下降文法分析方法(感覺 go
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。安裝Homebrew在Homebrew複製安裝命令,在控制台運行完成安裝安裝golnag$ brew update && brew upgrade$ brew install goPATH配置建立一個目錄作為gopath,在目錄建立三個目錄bin、src、pkg$ cd ~$ vim .bash_profile編輯.bash_profile檔案並儲存,檔案內容如下export
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。續上一篇的思路,解決延遲計算的問題。相關的keyword很容易想到yield。 在C#中的延遲計算介紹可以參考一些文章,例如 “不能不說的C#特性-迭代器(下) yield以及流的延遲計算” http://www.cnblogs.com/yuyijq/archive/2008/07/19/1246609.html 文章中提到 一、每次只返回一個元素的方法(閱讀者請跳到下文的第二部分)
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。上一篇學了記憶體結構基本知識,本文將學習符號(symbol)、語句的含義。我個人喜歡通過例子來學習,所以,我就從src/runtime/asm_amd64.s裡的bytes·Equal入手吧:)對應代碼TEXT bytes·Equal(SB),NOSPLIT,$0-49MOVQa_len+8(FP), BXMOVQb_len+32(FP), CXCMPQBX, CXJNEeqretMOVQa+0(FP),
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。前言本文是我學習Go彙編的一些心得,網上關於Go的彙編資料實在是太少了,本人電腦不是科班,所以可能會有錯誤。進程記憶體位址空間作業系統執行程式時,會把程式的二進位部分載入進記憶體,同時分配一定的記憶體空間。如所示TEXT/Code segmentTEXT segment,或者叫Code segment,儲存了程式的指令。只能執行固定長度Data segmentData segment
Time of Update: 2017-02-10
這是一個建立於
Time of Update: 2017-02-10
這是一個建立於
Time of Update: 2017-02-10
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。上周我在Gopher
Time of Update: 2017-02-10
這是一個建立於
Time of Update: 2017-02-10
這是一個建立於
Time of Update: 2017-02-10
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。fasthttp 是 Go 的一款不同於標準庫 net/http 的 HTTP 實現。fasthttp 的效能可以達到標準庫的 10 倍,說明他魔性的實現方式。主要的點在於四個方面:net/http 的實現是一個串連建立一個 goroutine;fasthttp 是利用一個 worker 複用 goroutine,減輕 runtime 調度 goroutine 的壓力net/http 解析的請求資料很多放在 map[string]
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。今天介紹一下 go語言的並發機制以及它所使用的CSP並行存取模型CSP並行存取模型CSP模型是上個世紀七十年代提出的,用於描述兩個獨立的並發實體通過共用的通訊 channel(管道)進行通訊的並行存取模型。 CSP中channel是第一類對象,它不關注發送訊息的實體,而關注與發送訊息時使用的channel。Golang CSPGolang
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。寫Go的人應該都聽過Rob Pike的這句話Do not communicate by sharing memory; instead, share memory
Time of Update: 2017-02-11
這是一個建立於
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。今天給大家介紹3個我覺得比較有啟發的Golang小技巧,分別是以下幾個程式碼片段nsq裡的select寫檔案和socketio模組裡的sendfilefasthttp裡對header的處理nsq裡的select讀在nsq中,需要讀取之前磁碟上的,或者是從記憶體中直接讀取,一般人都是先判斷記憶體中有沒有資料,然而,nsq另闢蹊徑使用了select語句,把CSP模式用到了極致。源檔案連結:channel.go
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。本文為部分翻譯、整理。 原文為Go的開發人員之一的Dave Cheney所做的 Five things that make gofast清晰賦實值型別例如,有一個絕對不會超過uint32的數值,就不要用int var gocon uint32 = 2015 這樣gocon這個值只會佔用4個位元組為啥呢? 因為如,CPU的處理速度已經遠超記憶體的匯流排速度了
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。近日參加了某雲的SDK編寫比賽,官方給的範例是個Python版,請求直接用**params這樣方法構造請求體因為尼瑪Golang是靜態語言,我們嚴謹!沒有可變參數!還沒有預設值!!所以我苦逼地寫了一個多小時類似這樣的代碼:func (c *Client) GetHostInstance(id string, option string, count int) {//
Time of Update: 2017-02-11
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。ZeroMQ有一對Pub/Sub socket 類型,但是網上的教程一般側重於使用TCP版本的……雖然TCP版本的也能組網,但是略顯麻煩,今天我來給大家介紹一下基於PGM協議的ZeroMQ Pub/Sub模型 首先要編譯安裝OpenPGM brewinstall libpgm 接著是zmq brew install zmq --with-pgm 這樣就準備好了環境了,這裡需要瞭解一下PGM網路的原理,很簡單,如 綠色的就是發送方,
Time of Update: 2017-02-10
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。之前我們介紹了io包和協議解析,這次我們要來講講bufio包,這個包實現了在項目中很常用到的帶緩衝的IO。先從我們前一個小貼士中的分包代碼講起,重新貼一下這段代碼:func ReadPacket(conn net.Conn) ([]byte, error) { var head [2]byte if _, err := io.ReadFull(conn, head[:]); err != nil {
Time of Update: 2017-02-10
這是一個建立於