for迴圈中用的變數是復用的,配合閉包,啟用goroutine的時候要特別小心。
func main() ()
} time.sleep(time.second)
}result:4444
package main
import "time"
func main() ()
} time.sleep(time.second)
}result: 1234
例1,當四個routine起來的時候,i已經被賦值為4,4個routine傳入的是統一個i,所以列印出4444。
例2,起每個routine前都sleep一會,也就是當前routine起來時,前乙個已經起來,並完成列印。所以列印1234。
乙個簡單的framework for a rate-limited, parallel, non-blocking rpc system, and there's not a mutex in sight,client,server例子。
package main
//import "time"
import "fmt"
type request struct
func main() , sum, make(chan int)}
request2 := &request, sum, make(chan int)}
// send request
// clientrequests := make(chan *request) leads to deadlock
clientrequests := make(chan *request, 2)
clientrequests <- request1
clientrequests <- request2
// wait for response.
go func(queue chan *request)
}(clientrequests)
fmt.printf("answer: %d\n", <-request1.resultchan)
fmt.printf("answer: %d\n", <-request2.resultchan)
}func sum(a int) (s int)
return
}
main相當於client,新開的routine相當於server。
package main
import "fmt"
func sum(m map[int]int)
func main()
package main
import "fmt"
func fn(m map[int]int)
func main()
例1說明map是通過reference的方式傳遞,
為什麼例2會返回true
可以reference傳遞的前提是已經有分配記憶體,nil的時候無法reference嗎?
學習隨記 websocket
知乎上乙個講解的非常好 首先,websocket是乙個html5出的協議 為什麼要出這個協議?因為 1.http不是持久鏈結,每次鏈結都耗時 即http是非狀態,每次都要重新鑑別,告訴服務端你是誰,浪費了流量和時間 so 出現websocket websocket是持久化的協議,它是基於http 首...
git git學習隨記
git是乙個開源的分布式版本控制系統,可以有效 高速地處理從很小到非常大的專案版本管理。下面是我對git學習的一些筆記 不定期更新擴充套件 touch 檔名.檔案字尾上述命令有兩個作用 1 git fetch 相當於是從遠端獲取最新到本地,不會自動merge,操作如下 git fetch origi...
hibernate學習隨記
hibernate學習隨記 一 hibernate的核心類和介面 configuration 類 它的用處是 讀取hibernate.cfg.xml 載入hibernate 的驅動,url 使用者.管理hibernate配置資訊 hibernate.cfg.xml 物件關係對映檔案 sessionf...