Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 golang官方編譯器安裝與配置 因為golang是用部分功能語言編寫的,所有首先應安裝gcc, $ sudo apt-get install bison gawk gcc libc6-dev make 安裝mercurial工具,用於提取golang的原始碼 $ sudo apt-get install mercurial 提取golang的原代碼 $hg clone -r release
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。func main() {arr := [10]int {1,2,3,4,5,6,7,8,9,10}var slice1 []int = arr[:5] //取數組前5個slice2 := arr[5:]//取數組後5個slice3 := make([]int, 5)//make一個切片,初始化前5個為0 mySlice2 := make([]int, 5, 10) // make一個切片,初始化前5
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 使用天氣預報的介面:http://weather.china.xappengine.com/api?city=南寧 (找了好久才找到一個支援拼音的,不過好像小地方是沒資料的) 訪問得到json格式壓縮的資料,格式化後 { "pub": "2013-06-29 22:59", "name": "南寧", "wind": {
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。聲明: 源slice= src 添加slice = app 結果slice=tar append時 len tar === len src + len app 1)如果len(src) + len(app) <= cap(src) cap tar = cap(src) 2)否則 a) len(src) + len(app) > 2* cap(src) cap tar =
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。func main() {size := 1datasSlice := make([][]byte, size)for i := 0; i < size; i++ {datasSlice[i], _ = ioutil.ReadFile("images/" + strconv.Itoa(i+1) + ".jpg")fmt.Println("raw size:", strconv.
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 下面總結一下go的序列化,通訊中常用的格式:msgpack和json msgpack 安裝: go get go get github.com/vmihailenco/msgpack go install github.com/vmihailenco/msgpack api:http://godoc.org/github.com/vmihailenco/msgpack func ExampleEncode() {
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 在上一篇moonmq的介紹中(這裡),我僅僅簡短的羅列了一些moonmq的設計想法,但是對於如何使用並沒有詳細說明,公司同事無法很好的使用。 對於moonmq的使用,其實很簡單,範例代碼在這裡,我們只需要處理好broker,consumer以及publisher的關係就可以了。 首先,我們需要啟動一個broker,因為moonmq現在只支援tcp的自訂協議,所以broker啟動的時候需要指定一個listen address。
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Ticker 最近的項目用go實現的伺服器需要掛載大量的socket串連。如何判斷串連是否還存活就是我們需要考慮的一個問題了。 通常情況下面,socket如果被用戶端正常close,伺服器是能檢測到的,但是如果用戶端突然拔掉網線,或者是斷電,那麼socket的狀態在伺服器看來可能仍然是established。而實際上該socket已經不可用了。
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 申請google app engine ID 具體步驟問google 部署個goagent,不然在大陸你肯定別想順利進行下面的步驟 具體步驟問google 下載go_appengine_sdk,在windows下測試,下的版本是go_appengine_sdk_windows_386-1.8.8 下載 Python 2.7.6 http://www.python.org/download/releases/2.7
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 leveldb是一個很強悍的kv資料庫,自然,我也希望能在go中使用。 如果有官方的go leveldb實現,那我會優先考慮,譬如這個,但是該庫文檔完全沒有,並且在網上沒發現有人用於實戰環境,對其能否在生產環境中使用打上問號,保險起見,我還是決定不使用。 因為leveldb有c的介面,所以通過cgo能很方便的進行整合,所以我決定採用該種方式,幸運的是,已經有人做了cgo的版本,也就是levigo。
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。類型轉換在程式設計中都是不可避免的問題。當然有一些語言將這個過程給模糊了,大多數時候開發人員並不需要去關注這方面的問題。但是golang中的類型匹配是很嚴格的,不同的類型之間通常需要手動轉換,編譯器不會代你去做這個事。我之所以說通常需要手動轉換,是因為interface類型作為一個特例,會有不同的處理方式。 golang中的所有類型都有自己的預設值,對此我做了個測試。 $GOPATH/src
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。在網路傳輸協議過程中,封包常見的方式一般是: ①頭標識+資料頭(類型/屬性/資料長度)+資料體+尾標識 -->一般還需要轉義 ②固定長度 --> 編解碼方便,浪費寬頻 ③通過結尾標識(eg.通過base64傳輸,以\0結束) -->編解碼方便,浪費 寬頻 下面是golang在編解碼的常用手段 解碼 首先需要把[]byte的ascii串轉化為uint8,uint16,uint32,uint64等
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 net.http 包中的逾時設定 服務端 app.Server.ReadTimeout app.Server.WriteTimeout 是針對所有請求設定的選項 預設 net.http keepalived 開啟,逾時時間為 3 分鐘,如下 1942 type tcpKeepAliveListener
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 Channel 重複關閉channel ch := make(chan bool)close(ch)close(ch) // 這樣會panic的,channel不能close兩次 讀取的時候channel提前關閉了channel close(ch)i := <- ch //不會panic, 但是i讀取到的是零值(""/false/nil) 向已經關閉的channel寫資料
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。因為我的本地開發環境是os x 但伺服器是linux,所以需要編譯linux用的go程式,方法如下: 各平台的GOOS和GOARCH參考 OS ARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386 / amd64 OS X (Snow Leopard + Lion) freebsd 386 / amd64 >= FreeBSD 7
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 golang 語言中 也有 類是 javascript 的 typeof 判斷類型的 方法 比如 func (a interface{}){ //第一種 if inst,ok:=a.(TypeA);ok{ inst.MethodA() } //第二種
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 總結一下golang中的指標與C語言的指標的用法。 總體一致: C的代碼: int *number;number = (int *) malloc(sizeof(int));*number = 3;printf("%d\n", *number); golang的代碼: var pointer *int;pointer = new(int);*pointer =
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。golang時間處理 相關包 "time" 時間戳記 目前時間戳 fmt.Println(time.Now().Unix())# 1389058332 str格式化時間 當前格式化時間 fmt.Println(time.Now().Format("2006-01-02 15:04:05")) # 這是個奇葩,必須是這個時間點, 據說是go誕生之日, 記憶方法:6-1-2-3-4-5# 201
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 首先說明golang 語言設計設有個叫 XXnuts的傢伙,果然是個變態,把時間原點設計在了 2006-01-02 15:04:05 其實人家這個日期是有意義的: 2006-01-02T15:04:05Z07:00 每個數位意義: 1 2 3 4 5 6 7 月 日 時 分 秒 年 時 區 常用的方法: 1 toTime格式化(Parsing): 用法一: 使用毫秒數 t :=
Time of Update: 2014-10-04
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。今天開始打算學習golang, 說 並發性很好,非常適合做伺服器開發的.初步打算用golang寫伺服器網關,用python寫商務服務器,這樣可以減少服務的重啟率,提高服務穩定性和效率. IDE使用LiteIDE 設定檔如下: 查看 -- 編輯環境變數 # native compiler windows 386GOROOT=D:\Software\golangGOBIN=D:\Software\golang\binGOPATH=C: