Golang 中的网络编程有哪些常见的库?

Golang 标准库提供了丰富的网络相关包,常见的有:

  1. net/http:HTTP 客户端与服务器
    例如:
// 启动HTTP服务器
http.ListenAndServe("8080", nil)

// GET请求
resp, _ := http.Get("http://example.com")

// 处理请求
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello World!"))
})
  1. net:基础网络操作
    例如:
// TCP连接
conn, _ := net.Dial("tcp", "example.com:80")

// UDP连接 
conn, _ := net.Dial("udp", "example.com:80")

// 启动TCP服务器
listener, _ := net.Listen("tcp", ":8080")
conn, _ := listener.Accept()
  1. grpc:RPC框架
    例如:
// 服务端
grpcServer := grpc.NewServer()
pb.RegisterGreeterServer(grpcServer, &server{})
grpcServer.Serve(listener)

// 客户端
conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())
c := pb.NewGreeterClient(conn)
  1. websocket:基于HTTP的 WebSocket 网络协议
    例如:
// 服务端
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
    ws, _ := websocket.Upgrade(w, r, nil, 1024, 1024)
})

// 客户端 
ws, _, _ := websocket.DefaultDialer.Dial("ws://localhost:4000/ws", nil)
ws.WriteMessage(websocket.TextMessage, []byte("Hello, World!"))
  1. tcp:TCP底层操作
    例如:
// 服务端
listener, _ := tcp.Listen("tcp4", ":4999")
for {
   conn, _ := listener.AcceptTCP() 
   // ...
}

// 客户端
conn, _ := tcp.Dial("tcp4", "127.0.0.1:4999")