Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。限速器之前看到這篇golang並發編程的兩種限速方法,覺得 sleep 等待的方式不是特別好,喚醒線程的時間比較長。而且1s內的請求只能均勻的到來,如瞬間來 N 個, 那麼只有一個能立刻返回,剩下的只能等待。【修正】根據的說明,無論是 sleep 還是 chan block, 發生的事情都是 G 和 P
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。每個人都會變成自己討厭的人Git 通過二進位檔案 .git/index 來緩衝目前的目錄,實現工作目錄和倉庫資料的快速交換。Git 的緩衝卻儲存在 index 檔案裡,為什麼不是 cache,很奇怪。Git 目前的目錄緩衝至少應該滿足以下功能:可隨時根據當前倉庫(HEAD 狀態)產生緩衝。緩衝不一定總是和倉庫狀態保持一致。快取資料格式固定,可長期被多個 Git 命令解析。Git index 檔案格式目前的目錄快取檔案承擔多個
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。總訣:“歸妹趨無妄,無妄趨同人,同人趨大有。甲轉丙,丙轉庚,庚轉癸。子醜之交,辰巳之交,午未之交。風雷是一變,山澤是一變,水火是一變。乾坤相激,震兌相激,離巽相激。三增而成五,五增而成九……”(共三千餘字)獨孤九劍講究料敵先機,無招勝有招。在程式世界裡,需要根據不同的需求不斷的迭代。系統不能像劍法一樣隨手變更,往往需要花費無數個人月「最近體會到可以把變化做成介面,留給使用者,來應對一部分需求變更」。程式=演算法+資料結構,
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。又挖了一個深坑,不是沒事專坑自己。只是想在無聊的時光裡,找點樂子,找點事做。小時候,最令我著迷的就是鄰家的 DVD。印象中的男主角都會經曆三個階段:
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。簡介Go語言的並發原語允許開發人員以類似於 Unix Pipe 的方式構建資料流水線 (data pipelines),資料流水線能夠高效地利用 I/O和多核 CPU 的優勢。本文要講的就是一些使用流水線的一些例子,流水線的錯誤處理也是本文的重點。閱讀建議資料流水線充分利用了多核特性,代碼層面是基於 channel 類型 和 go 關鍵字。channel 和 go
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。好多些天前,我在golang實踐群裡問了下面代碼的問題:package mainimport "fmt"type Aer interface{ Name()string PrintName()}type A struct {}func (a *A) Name() string { return "a"}func (a *A) PrintName() {
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package mainimport ("fmt""golang.org/x/net/websocket""log""net/http""os""time")var (dirPath stringtest bytelenFile int)func check(e error) {if e != nil { panic(e)}
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package mainimport ( "bufio" "code.google.com/p/mahonia" "fmt" "io" "net" "os")func main() { fmt.Println("create a server or client?")
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。安裝 delve官方的文檔已經很全了,參考這裡(github)安裝。Mac OSX 比較麻煩,需要搞定認證。斷點和變數列印delve 裝好之後就可以直接在命令列使用 dlv 命令了。查看可用的命令dlv -h看協助資訊可知:支援用 dlv attach 的方式調試正在啟動並執行進程,支援 dlv connect 連結到網路連接埠調試。這裡先用最簡單的 dlv debug 調試。dlv debug main.go然後會進入偵錯模式,
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Go語言:簡介(二)對Go語言瞭解前,我們先來補一些基本概念基本概念並發程式一個並發程式可以在一個處理器或者核心上使用多個線程來執行任務,但是只有同一個程式在某個時間點同時運行在多核或者多處理器上才是真正的並行。並發程式可以是並行的,也可以不是。多線程缺點使用多線程的應用難以做到準確,最主要的問題是記憶體中的資料共用,它們會被多線程以無法預知的方式進行操作,導致一些無法重現或者隨機的結果。使用多線程需要在意同步問題,可能出現死結,
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。之前寫了原理篇,在原理篇裡簡單的介紹了一下DHT,但是還不夠詳細。今天我們就專門詳細的講一下嗅探器的核心-DHT,這裡預設原理篇你已經讀了。背景知識DHT全稱 Distributed Hash Table,中文翻譯過來就是分布式雜湊表。它是一種去中心化的分布式系統,特點主要有自動去中心化,強大的容錯能力,支援擴充。另外它規定了自己的架構,包括keyspace和overlay
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。簡介Reflection(反射)在電腦中表示
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。安全總是很重要的,各個語言對於通用的密碼編譯演算法都會有實現。前段時間,用Go實現了RSA和DES的加密解密,在這分享一下。(對於RSA和DES密碼編譯演算法本身,請查閱相關資料)在PHP中,很多功能經常是一個函數解決;而Go中的卻不是。本文會通過PHP加密,Go解密;Go加密,PHP解密來學習Go的RSA和DES相關的API。該文討論Go
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。《南皮縣誌·風土誌下·歌謠》:“兵馬不動,糧草先行”。作戰時兵馬還沒出動,軍用糧草的運輸要先行一步。在開發新功能之前,先編寫測試代碼,然後只編寫使測試通過的功能代碼,這種測試驅動開發的軟體開發模式是我非常推薦的。對 Dit 的貢獻要求需要通過單元測試,編寫 Dit 的任意模組,都需要一併編寫測試案例。本文先簡述一下 Go 對測試的支援,後續會陸續提供 Dit 的測試方案和測試報告。Go 對測試的支援Go 內建的測試架構
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。接前面的《字串尋找演算法》繼續寫。上一篇文章說過,神奇的數字16777619,當時不知道這個是幹嘛用的,現在差不多知道了。字串雜湊,會經常用到FNV雜湊演算法。FNV雜湊演算法如下:將字串看作是字串長度的整數,這個數的進位是一個質數。計算出來結果之後,按照雜湊的範圍求餘數,結果就是雜湊結果。#define TRUE_HASH_SIZE ((u_int32_t)50000) /* range top plus 1
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。之前看過一本書,說:“凡大神都是先寫好單元測試用例,才去寫代碼的”。我一直都記在心裡。今天終於有空,就看了看Golang的測試包testing。謝大的書和Golang官方的文檔講的差不多,Golang提供了兩個測試方式:用例測試和壓力測試。###1. 用例測試用例測試的規則我是複製謝大的: 檔案名稱必須是_test.go結尾的,這樣在執行go test的時候才會執行到相應的代碼 你必須import testing這個包
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。合并slice,跟合并數組一樣,是比較常見的操作。映像中C++運算子多載以後,直接用加號就可以了。Golang果斷不行。先開始用copy解決。func copy(dst, src []Type)
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。今天讓官方文檔虐了幾條街。需要能夠對JSON資料進行編碼,將內部的中文字串轉成Unicode編碼。編碼這種東西接觸也不少了,隨便搜一下就能解決。果斷去搜了一下。本文所有編碼rs := []rune("golang中文unicode編碼")j := ""html := ""for _, r := range rs {rint := int(r)if rint < 128 {j +
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。介紹雜湊函數之前,先說一下Golang的雜湊結果。在包/hash/下的hash.go檔案,定義了雜湊函數的介面。所有雜湊函數都要實現此介面。// Hash is the common interface implemented by all hash functions.type Hash interface {// Write (via the embedded io.Writer interface) adds more