GO 學習隨記

2021-08-28 14:09:14 字數 1575 閱讀 3029

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...