Golang 标准库提供了丰富的网络相关包,常见的有:
- 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!"))
})
- 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()
- grpc:RPC框架
例如:
// 服务端
grpcServer := grpc.NewServer()
pb.RegisterGreeterServer(grpcServer, &server{})
grpcServer.Serve(listener)
// 客户端
conn, _ := grpc.Dial("localhost:50051", grpc.WithInsecure())
c := pb.NewGreeterClient(conn)
- 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!"))
- tcp:TCP底层操作
例如:
// 服务端
listener, _ := tcp.Listen("tcp4", ":4999")
for {
conn, _ := listener.AcceptTCP()
// ...
}
// 客户端
conn, _ := tcp.Dial("tcp4", "127.0.0.1:4999")