UDP服務端
===
~~~
func main() {
// 解析得到UDP地址
addr, e := net.ResolveUDPAddr("udp", ":9001")
err.CheckErr(e)
// 在UDP地址上建立UDP監聽,得到連接
conn, e := net.ListenUDP("udp", addr)
err.CheckErr(e)
defer conn.Close()
// 建立緩沖區
buffer := make([]byte, 1024)
for {
//從連接中讀取內容,丟入緩沖區
i, udpAddr, e := conn.ReadFromUDP(buffer)
// 第一個是字節長度,第二個是udp的地址
if e != nil {
continue
}
fmt.Printf("來自%v,讀到的內容是:%s\n",udpAddr,buffer[:i])
// 向客戶端返回消息
conn.WriteToUDP([]byte("hello"),udpAddr)
}
}
~~~
- Hello World
- UDP
- UDP服務端
- UDP客戶端
- UDP廣播
- 錯誤處理
- 編寫好的異常處理
- panic和recover
- 并發編程
- Hello Goruntine
- 共享內存并發機制
- RWMutex
- CSP并發機制
- 多路復用和超時控制
- 通道關閉與廣播
- Context與任務的取消
- 只運行一次
- 按需任意任務完成
- 所有任務完成
- 補充:range channel注意實現
- 對象池
- sync.Pool臨時對象池
- 單元測試
- 表格測試法
- Banchmark
- BDD
- 反射
- 利用反射編寫靈活的代碼
- Struct Tag
- 萬能程序
- 常用架構模式
- Pipe-filter pattern
- Micro Kernel
- 性能分析
- 高性能代碼
- sync.MAP分析
- Concurrent Map
- GC友好的代碼
- Uber開發風格規范