Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。序言此前,我看過這樣的一個提問“Yii2架構中,有必要再分離service層嗎?”,從別人的回答中,自己也收穫了答案,但我覺得還需要有個活生生的粟子,才具有更加清晰明了和強有力的說服力。如對我的實戰經曆感興趣的繼續往下看,喜歡的還可以點擊推薦和收藏。在舉粟子前,我先講講service是什嗎?有什麼作用吧?免得還有人糊塗。1、service是什嗎?在面向OO的系統裡,service就是biz
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package mainimport ( "fmt" "os" "time")func check(e error) { if e != nil { panic(e) }}func cat(f *os.File) []byte { var payload []byte for { buf :=
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。一、執行流程構建一個簡單http server:package mainimport ( "log" "net/http")func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。前言用過go語言的親們都知道,slice(中文翻譯為切片)在編程中經常用到,它代表變長的序列,序列中每個元素都有相同的類型,類似一個動態數組,利用append可以實現動態增長,利用slice的特性可以很容易的切割slice,它們是怎麼實現這些特性的呢?現在我們來探究一下這些特性的本質是什麼。先瞭解一下slice的特性定義一個slice:s := []int{1,2,3,4,5}fmt.Println(s) // [1 2 3 4
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。今天在嘗試用go寫一個簡單的orm的時候 發現 在調用可變參數函數時,不是總能使用省略符號將一個切片展開,有時候編譯器可能會報錯 再此用幾個簡單的例子作為說明當不太確定資料類型的時候我們通常採用空介面tests1(789)fmt.Println("-------------")tests1("789")func tests1(arg interface{}) { fmt.Println(
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。我最早接觸的Go WEB架構是beego,很強大的一個架構,也是很多人的首選,就是因為太(bu)強(gou)大(ling)了(huo),後來嘗試了Macaron(martini)。Macaron的設計是眾多架構的主流思想,路由、中介軟體、HTTP上下文,然後自己實現了一些常用的中介軟體(PS.
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Go語言:簡介(一)對Go語言瞭解前,我們先來補一些基本概念基本概念Program Errorstrapped errors。導致程式終止執行,如除0,Java中數組越界訪問untrapped errors。 出錯後繼續執行,但可能出現任意行為。如C裡的緩衝區溢位、Jump到錯誤地址Forbidden Behaviours語言設計時,可以定義一組forbidden behaviors. 它必須包括所有untrapped
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。GC記憶體回收機制: 淺析與理解對記憶體回收進行分析前,我們先來瞭解一些基本概念基本概念記憶體管理:記憶體管理對於程式設計語言至關重要。彙編允許你操作所有東西,或者說要求你必須全權處理所有細節更合適。C 語言中雖然標準庫函數提供一些記憶體管理支援,但是對於之前調用 malloc 申請的記憶體,還是依賴於你親自 free 掉。從C++、Python、Swift 和 Java
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。簡介Dodoc 的 樣本 是一些可執行檔測試代碼的彙總,他們做為包的文檔中的一部分提供給讀者閱讀和執行。讀者可以點擊 "Run" 按鈕來測試代碼。Golang 的標準包包括很多這種程式碼範例(比如 strings 包)本文將樣本如何寫出類似的程式碼範例。樣本即單元測試程式碼範例作為包的一部分編譯並執行。在典型的單元測試中,樣本就是包內 _test.go 檔案中的一些方法。程式碼範例跟測試代碼不同,樣本方法以
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。AlexAlex是基於vegeta library和boom封裝的壓力測試web UI。Vegeta提供穩定的qps壓力源,boom提供穩定的並發數壓力源。github地址 https://github.com/ireaderlab/alexEnglishAlex架構圖Alex
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。beego是Golang寫的應用程式開源架構http://beego.me/,我使用beego寫了一個項目小項目,golang是編譯語言,需要編譯之後再部署,每次部署到服務上是件很麻煩的事情。就寫了一個自動打包部署到伺服器的指令碼,方便發布部署。項目結構先看看beego項目的結構:beepkg|-- conf| `-- app.conf|-- controllers| `-- default.go|-- main.go|-
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Go 關鍵字和 channel 的用法go 關鍵字用來建立 goroutine (協程),是實現並發的關鍵。go 關鍵字的用法如下://go 關鍵字放在方法調用前建立一個 goroutine 並讓他執行方法體go GetThingDone(param1, param2);//上例的變種,建立一個匿名方法並執行go func(param1, param2) {}(val1, val2)//直接建立一個 goroutine 並在
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。最近用beego開發的項目頻繁的要部署到測試環境提測,然後部署到線上發布,由於兩種環境下設定檔中某些配置參數不同,每次手動修改很是麻煩,故而想有沒有辦法能根據部署環境的不同載入相應環境的組態變數。幸而得同事告知,兩種環境下都會注入ENV_CLUSTER這個系統內容變數,且變數值不同。於是,在main函數beego.Run()執行前,我建立了一個預先執行的init檔案,將自適應環境載入設定檔的代碼邏輯放在了這裡。具體代碼如下:
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。實際情況預設情況下,mongo使用_id自動產生uniq id,而且在mongo內建的命令裡,無法指定一個自增欄位。自增欄位在多線程時必須是原子性的,這在大資料情況下很難實現伸縮性(scalability)。Generally in MongoDB, you would not use an auto-increment pattern forthe _id field, or any field, because it
Time of Update: 2017-02-09
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。package mainimport ( "gopkg.in/mgo.v2" "log" "reflect")func main() { session, err := mgo.Dial("usr:pwd@127.0.0.1:27017/dbname") if err != nil {
Time of Update: 2017-02-09
這是一個建立於
Time of Update: 2017-02-09
這是一個建立於