Time of Update: 2017-12-07
標籤:參數 ace 區分 模式 實現 strong 編寫高品質代碼 c# 傳遞 建議107:區分靜態類和單例有一種觀點認為:靜態類可以作為單件模式的一種實現方式。事實上,這是不妥當的
Time of Update: 2017-12-07
標籤:empty 應用 編寫高品質代碼 list 體會 pre 類型 優先 靜態方法 建議96:成員應優先考慮公開基底類型或介面類型成員如果優先考慮公開及類型或介面,那麼會讓類型支援
Time of Update: 2017-12-07
標籤:基類 ret ati 改善 品質 成員 iterator row error 建議97:優先考慮將基底類型或介面作為參數傳遞除了公開及類型或介面外,方法的參數也應該考慮基底類型
Time of Update: 2017-12-07
標籤:nbsp str 代碼 params strong 參數聲明 method 一個 span 建議98:用params減少重複參數如果方法的參數數目不定,且參數類型一致,則可以使
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。開啟cmd命令視窗儲存,編譯,執行:1.儲存到一個×××.go的檔案(我這裡儲存到 E:\GoTest\hello.go 下)2.編譯,在命令提示字元中執行命令:go build -o E:\GoTest\hello.exe E:\GoTest\hello.go 在指定目錄下產生 .exe 檔案或者go build E:\GoTest\hello.go 在目前的目錄下產生 .exe
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。goLang的mysql操作,大致可分為三個步驟:1、下載mysql驅動:go get
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 golang這個新興的語言,最關鍵的就在於goroutine,而goroutine的調度又是golang的核心。可以說,沒有goroutine,那麼這個語言就會毫無意義,沒有發明的必要。為了能夠更好的寫出高品質的代碼,最近學習了goroutine的調度,收穫良多。寫篇文章總結記錄一下。我的參考資料Analysis of the Go runtime scheduler
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。實值型別的變數和指標類型的變數先聲明一個結構體:type T struct { Name string}func (t T) M1() { t.Name = "name1"}func (t *T) M2() { t.Name = "name2"}M1() 的接收者是實值型別 T, M2() 的接收者是實值型別 *T , 兩個方法內都是改變Name值。下面聲明一個 T
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。go局部變數的儲存空間是堆還是棧?編譯器會自動選擇在棧上還是在堆上分配局部變數的儲存空間,但可能令人驚訝的是,這個選擇並不是由用var還是new聲明變數的方式決定的。var global *intfunc f() { var x int x = 1 global = &x}func g() { y := new(int) *y =
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Go語言中的內建函數new和make是兩個用於記憶體配置的原語(allocation primitives)。對於初學者,這兩者的區別也挺容易讓人迷糊的。簡單的說,new只分配記憶體,make用於slice,map,和channel的初始化。1. new函數The new build-in function allocates memory(僅僅分配空間). The first argument is a type, not a
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。1、數組golang中的數組是一種由固定長度和固定物件類型所組成的資料類型。例如下面:var a
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。平時寫得多的是python,最近看了一點go,今天碰到了一個問題,和大家分享一下package mainimport "fmt"type student struct { Name string Age int}func pase_student() { m := make(map[string]*student) stus := []student{ {Name: "zhou", Age:
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。這是我們 [Golang 系列教程](/subject/2)的第五篇。### 定義在 Go 語言中,術語"常量"用於表示固定的值。比如 `5` 、`-89`、 `I love Go`、`67.89` 等等。看看下面的代碼:```govar a int = 50 var b string = "I love Go" ```**在上面的代碼中,變數 `a` 和 `b` 分別被賦值為常量 `50`
Time of Update: 2017-12-07
這是一個建立於
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。golang結構體和類golang中並沒有明確的物件導向的說法,實在要扯上的話,可以將struct比作其它語言中的class。類聲明type Poem struct { Title string Author string intro
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。這是我們 [Golang 系列教程](/subject/2)的第 4 個教程。請閱讀本系列的 [Golang 教程第 3 部分:變數](/articles/11756) 來學習變數的知識。下面是 Go 支援的基本類型:- bool- 數字類型- int8, int16, int32, int64, int- uint8, uint16, uint32, uint64, uint- float32, float64-
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。這一章節我們將詳細描述網路關鍵API的實現,主要包括Listen、Accept、Read、Write等。 另外,為了突出關鍵流程,我們選擇忽略所有的錯誤。這樣可以使得代碼看起來更為簡單。 而且我們只關注tcp協議實現,udp和unix socket不是我們關心的。Listenfunc Listen(net, laddr string) (Listener, error) { la, err :=
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。編程介面func Listen(net, laddr string) (Listener, error) func (*TCPListener) Accept (c Conn, err error) func (c *conn) Read(b []byte) (int, error) func (c *conn) Write(b []byte) (int, error)
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。Golang中實現協程調度演算法的主要有以下三個資料結構,正是這三個結構加上一些演算法構成了Golang的協程調度演算法,當然,這些資料結構也是在不斷進化的,保不準未來又會加入其他結構來提升調度器效能。協程調度主要資料結構其中:M: 代表作業系統線程,也就是我們經常理解的線程,是真正參與OS調度的單元,每個goroutine只有依附於某個M方可真正地執行; G: 代表協程,也就是我們經常使用的Goroutine; P:
Time of Update: 2017-12-07
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。說明雖然我們一直強調golang調度器是非搶佔式。非搶佔式的一個最大壞處是無法保證公平性,如果一個g處於死迴圈狀態,那麼其他協程可能就會被餓死。