February 13th, 2015
##雜七雜八感言:
最近工作都在弄Go的Server,應該之後會把心得整理一下. 發現用Go 來處理網路的相關封包,其實相當的方便又好用啊.
##筆記:
###[Golang] 一些有趣的package 跟 網站
- pt: A path tracer written in Go.
- 一個用Goy做的光影追蹤程式,透過gopher 3D來繪圖.
- Dave Cheney: Visualising the Go garbage collector
- 一個工具可以使覺化Go GC的狀態圖..
- Go Challenge: Learn Go by solving problems and getting feedback from Go experts!
- 怎麼快速學習程式語言?最好的方式就是拿它來解決問題,這邊每個月有一個問題提供出來~讓大家用Go來解決….
- Fucking Go Date Format
- 列出一些讓人很困擾的Go Date format…
- Go concurrency is not parallelism: Real world lessons with Monte Carlo simulations
- 透過一些取樣方式來證明其實Goroutine並沒有那麼的並行….
- JSON, interfaces, and go generate
- 關於Go裡面Json資料的處理方式…..
- Go: Socket-level Programming
- 教學文章… 用Go處理TCP或是UDP server/client其實相當簡單,可以處理的事情也幾乎都包好了.. 許多的細節.. 等我弄的差不多在整理文章…..
- Cockroachdb
- 大部份使用go完成的資料庫系統….
- Githut: A SMALL PLACE TO DISCOVER LANGUAGES IN GITHUB
- 用圖形表示在Github觀察的現象,包含做多repostories 還有最多commit跟最多issue,也有最近最多人關注的部分….
- A curated list of awesome Go frameworks, libraries and software
http://awesome-go.com/
-
有人記錄他覺得很棒的Go toolkit list根據他的分類.常常有忽然想到要什麼 toolkit 卻又想不到名字的窘境.. 看來maintain 自己一份toolkit list 也不錯…之前放 bookmark 後來放blog 還是一樣… 似乎有份list 比較重要.. 分門別類… tag
- Go-kit Peter 另外的list for morden enterprise.
- Go-kit.io 也是一份list
-
- gosms-Your own local SMS gateway
- Self host SMS system, sounds good, but I am using twilio for now.
###[Golang] 關於JSONRPC 心得筆記
利用JSONRPC package 可以很快速地建立一個JSON RPC Server/Client架構. 這裏有一個簡單的example可以參考,主要要注意的事情如下:
- API為兩個參數,一個Input 一個Output.還有回傳值err. 要注意, Output使用point,相關的數值處理小心忘記指標與數值的關係.
- 由於使用JSON,在Client這邊的回傳值個數可以多或是少. 不會影響結果,只要注意操作就好.
- 如果error 不為空的時候,千萬注意 output會被清掉. 這個是經過很多次失敗後,跑回去看src才知道是故意的.
Refer Golang pkg source /net/rpc/jsonrpc/server.go
resp := serverResponse{Id: b} if r.Error == "" { // 只有在 Error == nil 才會傳Return 的Interface.. resp.Result = x } else { resp.Error = r.Error } return c.enc.Encode(resp)
###[Golang] 關於Go init()
看到有人提到的有趣部分,也發現自己沒有那麼注意到這一塊. 主要問題來自於這個stack overflow
defined in its source. A package-scope or file-scope identifier with name init may only be declared to be a function with this signature. Multiple such functions may be defined, even within a single source file; they execute in unspecified order.
簡單的來說, func init()在一個檔案裡面會最早被呼叫到.但是不僅僅可以存在唯一個,他可以存在多數個的,並且正常運作. 而呼叫的順序會依照line order來排序,在前面的會先跑到.
package main import "fmt" func init() { fmt.Println("Run first") } func init() { fmt.Println("Run second") } func main() { fmt.Println("Hello, playground") }
Go Plau is here