golang學習筆記之 context詳細理解篇

2021-10-19 07:56:03 字數 3120 閱讀 3825

17:27:52 上班!

17:27:54 上班!

17:27:56 上班!

17:27:58 上班!

17:28:00 上班!

17:28:02 下班!

17:28:02 無腦發呆中!

*/

package main

import (

"context"

"log"

"os"

"time"

)var (

logg *log.logger

)func work(ctx context.context, ch chan bool)

}}func main()

/* outfile:

17:29:43 上班!

17:29:45 上班!

17:29:47 上班!

17:29:49 下班!

17:29:53 無腦發呆中!

*/

3.context.withtimeout

package main

import (

"context"

"log"

"os"

"time"

)var (

logg *log.logger

)func work(ctx context.context, ch chan bool)

}}func main()

/* outfile:

17:34:56 上班!

17:34:58 上班!

17:35:00 上班!

17:35:02 下班!

17:35:06 無腦發呆中!

*/

package main

import (

"context"

"fmt"

"log"

"os"

"time"

)var (

logg *log.logger

)func work(ctx context.context, ch chan bool)

}select

}}func main()

/* outfile:

2019-01-30 18:23:47.851042 +0800 cst m=+5.000360703

18:23:42 上班!

2019-01-30 18:23:47.851042 +0800 cst m=+5.000360703

18:23:43 上班!

2019-01-30 18:23:47.851042 +0800 cst m=+5.000360703

18:23:44 上班!

2019-01-30 18:23:47.851042 +0800 cst m=+5.000360703

18:23:45 上班!

2019-01-30 18:23:47.851042 +0800 cst m=+5.000360703

18:23:46 上班!

2019-01-30 18:23:47.851042 +0800 cst m=+5.000360703

18:23:47 超時退出!

18:23:47 context deadline exceeded //這裡就是ctx超時的時候ctx.err的錯誤訊息。

18:23:52 無腦發呆中!

*/

package main

import (

"context"

"fmt"

)func main()

func processrequest(username, password string)

func handleresponse(ctx context.context)

/* outfile:

處理響應 使用者名稱:admin 密碼:admin888

*/

使用的key必須是可比較的,也就是說== 和 != 必須能返回正確的結果

返回值必須是併發安全的,這樣才能從多個goroutine訪問

type foo int

type bar int

m := make(map[inte***ce{}]int)

m[foo(1)] = 1

m[bar(1)] = 2

fmt.printf("%v", m)

/*map[1:2 1:1]

*/

當你把所有這些放在一起時,你會得到類似下面的例子:

package main

import (

"context"

"fmt"

)func main()

type ctxkey int

const (

ctxusername ctxkey = iota

ctxpassword

)func username(c context.context) string

func password(c context.context) string

func processrequest(username, password string)

func handleresponse(ctx context.context)

/* outfile:

處理響應 使用者名稱:jane 密碼:abc123

*/

學習筆記 Golang起步之HelloWord

進入官網 以mac終端為 zsh為例,輸入下面命令 vi zshrc在最後追加下面 users quaint study golang study 為你的golang 工作空間,該空間下應該包含3個資料夾 src pkg bin root 為go安裝目錄 path 為go工作空間 export go...

Golang學習筆記

如果乙個method的receiver是 t,你可以在乙個t型別的例項變數v上面呼叫這個method,而不需要 v去呼叫這個method 即不需要 v method 如果乙個method的receiver是t,你可以在乙個 t型別的變數p上呼叫這個method,而不需要 p去呼叫這個method。i...

golang學習筆記

與c語法不同之處 1.引數列表中各個引數型別相同時可以只寫出最後乙個,如 add x,y int int 2.型別在引數名 變數 函式 後面 3.函式的左大括號要跟函式名同一行,否則編譯不過 4.函式定義要先寫關鍵字func在函式開頭 函式外的每個語句都要以func var等等關鍵字開頭 5.在包或...