Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 有一段時間,我們的推送服務socket佔用很不正常,我們自己統計的同時線上就10w的使用者,但是佔用的socket竟然達到30w,然後查看goroutine的數量,發現已經60w+。 每個使用者佔用一個socket,而一個socket,有read和write兩個goroutine,簡化的代碼如下: c, _ := listerner.Accept()go c.run()func (c *conn) run() { go
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 之前看過效能對比測試的文章,是關於node.js和golang的http模組,簡單的helloworld功能,原文在此: http://www.cnblogs.com/QLeelulu/archive/2012/08/12/2635261.html#2447171
Time of Update: 2014-10-04
這是一個建立於
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。雖然golang是用C實現的,並且被稱為下一代的C語言,但是golang跟C的差別還是很大的。它定義了一套很豐富的資料類型及資料結構,這些類型和結構或者是直接映射為C的資料類型,或者是用C struct來實現。瞭解golang的資料類型和資料結構的底層實現,將有助於我們更好的理解golang並寫出品質更好的代碼。 基礎類型 源碼在:$GOROOT/src/pkg/runtime/runtime.h 。我們先來看下基礎類型: /*
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 leveldb是一個很強悍的kv資料庫,自然,我也希望能在go中使用。 如果有官方的go leveldb實現,那我會優先考慮,譬如這個,但是該庫文檔完全沒有,並且在網上沒發現有人用於實戰環境,對其能否在生產環境中使用打上問號,保險起見,我還是決定不使用。 因為leveldb有c的介面,所以通過cgo能很方便的進行整合,所以我決定採用該種方式,幸運的是,已經有人做了cgo的版本,也就是levigo。
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 revel是典型的mvc架構,使用命令revel new [appname]建立revel工程後,預設結構為: app | controllers - mvc模式的控制器,接收用戶端request完成邏輯處理並返回渲染的結果-html,json,xml... | routes -
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。相關包有strings, strconv 判斷是否以某字串打頭/結尾 strings.HasPrefix(s string, prefix string) bool => 對應python的str.startswith strings.HasSuffix(s string, suffix string) bool => 對應python的str.endswith 字串分割 strings.Split(s
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。一、main.go該代碼從項目中分離出來,自行修改後再運行) package mainimport ("flag""fmt""log""os""runtime")var (Port = flag.String("i", ":12345", "IP port to listen on")
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Go tip 是 Go 語言的實驗分支,包含了很多尚在討論,但很有可能會加入 stable 分支的特性。“Go tip 在做什麼”(原文地址:What's happening in Go tip)分析總結了 Go 語言尚在開發中的一些重要特性。 本文譯自:What's happening in Go tip (2014-01-10) 現在是 2014 年了,剛剛經曆了聖誕和新年前夜,Go 團隊就已經開始為下一個發布版本而工作了。
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 /* 內建類型 實值型別: bool int(32 or 64), int8, int16, int32, int64 uint(32 or 64), uint8(byte), uint16, uint32, uint64 float32, float64 string complex64, complex128 array -- 固定長度的數組 參考型別:(指標類型) slice -- 序列數組(最常用) map
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。conn, err = ln.Accept()go handleConnection(conn) 看到這裡我曾經有個疑問,為什麼不是 handleConnection(&conn) ?
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1. 注意對session的values做改變,必須save才會生效
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。close new panic complexdelete make recover real len append print imag cap copy println close 用於channel 通訊。使用它來關閉channel delete 用於在map 中刪除執行個體。 len 和cap 可用於不同的類型, len 用於返回字串、slice 和數組的長度. new 用於各種類型的記憶體配置。 make
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。依賴注入(Dependency Injection)和控制反轉(Inversion of Control)是同一個概念。在傳統的程式設計過程中,調用者是自己來決定使用哪些被調用者實現的。但是在依賴注入模式中,建立被調用者的工作不再由調用者來完成,因此稱為控制反轉;建立被調用者執行個體的工作通常由注入器來完成,然後注入調用者,因此也稱為依賴注入。
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 golang channel 有緩衝 與 無緩衝 是有重要區別的 我之前天真的認為 有緩衝與無緩衝的區別 只是 無緩衝的 是 預設 緩衝 為1 的緩衝式 其實是徹底錯誤的,無緩衝的與有緩衝channel有著重大差別 那就是一個是同步的 一個是非同步的 怎麼說?比如 c1:=make(chan int) 無緩衝 c2:=make(chan int,1) 有緩衝 c1<-1
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 最近在玩2樣東西,一樣是go語言(golang),一樣是Raspberry Pi(樹莓派)。那麼能在Raspberry上運行go語言程式嗎? Golang的文檔上說是支援多平台的,其中也包括了ARM,看來有戲了,興沖沖開啟http://code.google.com/p/go/downloads/list (golang編譯器的下載頁面)
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。本文轉自life的leanote部落格: http://leanote.com/blog/view/531706971a91084358000000 fmt.Scanln()不是讀取一行, 而是遇到換行就停止, Scanln is similar to Scan, but stops scanning at a newline and after the final item there must be a newline
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 為什麼要寫這個程式 尋找時間同步Api 編寫同步程式 封裝成windows service 為什麼要寫這個程式 一直在關注golang, 從2011年4月配置環境寫了個hello world!(http://weibo.com/1409046677/wr4n3vdYFV), 後來沒再動手寫golang代碼了, 只是關注golang方面的資訊/資訊。去年到今年稍認真的看了一些golang的基礎文法,
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。看了 @喻恒春 大神的利用unsafe.Pointer來突破私人成員,覺得例子舉得不太好。而且不應該簡單的放個demo,至少要講一下其中的原理,讓看的童鞋明白所以然。see:http://my.oschina.net/achun/blog/122540 unsafe.Pointer其實就是類似C的void
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 在go中函數也是一種變數,我們通過type定義這種變數的類型。擁有相同參數和相同傳回值的函數屬於同一種類型。 通過將函數作為一種類型的變數,我們可以將這種類型的函數作為值傳遞。 下面是一個簡單的例子。 type functinTyoe func(int) bool // 聲明了一個函數類型func isOdd(integer int) bool {if integer%2 == 0 {return