Go语言网络编程的实例

简介: 【10月更文挑战第27天】Go语言网络编程的实例

以下是一些Go语言网络编程的实例:

  1. TCP服务器

    • 代码示例

      package main
      
      import (
          "fmt"
          "io"
          "net"
      )
      
      func handleConnection(conn net.Conn) {
             
          defer conn.Close()
          for {
             
              buf := make([]byte, 1024)
              n, err := conn.Read(buf)
              if err != nil {
             
                  return
              }
              fmt.Printf("Received: %s", string(buf[:n]))
              conn.Write([]byte("Message received."))
          }
      }
      
      func main() {
             
          listener, err := net.Listen("tcp", "localhost:8080")
          if err != nil {
             
              fmt.Println("Error listening:", err)
              return
          }
          defer listener.Close()
          for {
             
              conn, err := listener.Accept()
              if err != nil {
             
                  continue
              }
              go handleConnection(conn)
          }
      }
      
    • 说明:这个示例创建了一个TCP服务器,监听localhost:8080端口。每当有新的客户端连接时,它都会启动一个新的goroutine来处理该连接。服务器读取客户端发送的数据,并将其打印到控制台,然后向客户端发送确认消息[^1^]。
  2. TCP客户端

    • 代码示例

      package main
      
      import (
          "fmt"
          "net"
      )
      
      func main() {
             
          conn, err := net.Dial("tcp", "localhost:8080")
          if err != nil {
             
              fmt.Println("Error dialing:", err)
              return
          }
          defer conn.Close()
          conn.Write([]byte("Hello, server!"))
          buf := make([]byte, 1024)
          n, err := conn.Read(buf)
          if err != nil {
             
              fmt.Println("Error reading:", err)
              return
          }
          fmt.Printf("Received: %s", string(buf[:n]))
      }
      
    • 说明:这个示例是一个TCP客户端,它连接到上面提到的TCP服务器,并发送一条消息。然后,它等待服务器的响应,并将其打印到控制台[^1^]。
  3. HTTP服务器

    • 代码示例

      package main
      
      import (
          "fmt"
          "net/http"
      )
      
      func helloHandler(w http.ResponseWriter, r *http.Request) {
             
          fmt.Fprintf(w, "Hello, World!")
      }
      
      func main() {
             
          http.HandleFunc("/", helloHandler)
          http.ListenAndServe(":8080", nil)
      }
      
    • 说明:这个示例创建了一个简单的HTTP服务器,监听localhost:8080端口。当HTTP请求到达服务器时,它会调用helloHandler函数来处理请求,并向客户端发送“Hello, World!”作为响应[^5^]。
  4. 并发HTTP服务器

    • 代码示例

      package main
      
      import (
          "fmt"
          "log"
          "net/http"
      )
      
      func helloHandler(w http.ResponseWriter, r *http.Request) {
             
          fmt.Fprintf(w, "Hello, %q", r.URL.Path[1:])
      }
      
      func main() {
             
          http.HandleFunc("/", helloHandler)
          log.Fatal(http.ListenAndServe(":8090", nil))
      }
      
    • 说明:这个示例展示了如何创建一个可以处理并发请求的HTTP服务器。它使用了Go语言的并发特性(goroutine),使得每个HTTP请求都在自己的goroutine中处理,从而提高了服务器的性能和响应速度[^5^]。
  5. WebSocket服务器

    • 代码示例

      package main
      
      import (
          "fmt"
          "log"
          "net/http"
          "github.com/gorilla/websocket"
      )
      var upgrader = websocket.Upgrader{
             } // use default options
      
      func echo(w http.ResponseWriter, r *http.Request) {
             
          c, err := upgrader.Upgrade(w, r, nil)
          if err != nil {
             
              log.Print("upgrade:", err)
              return
          }
          defer c.Close()
          for {
             
              mt, message, err := c.ReadMessage()
              if err != nil {
             
                  log.Println("read:", err)
                  break
              }
              log.Printf("recv: %s", message)
              err = c.WriteMessage(mt, message)
              if err != nil {
             
                  log.Println("write:", err)
                  break
              }
          }
      }
      
      func main() {
             
          http.HandleFunc("/echo", echo)
          log.Fatal(http.ListenAndServe("localhost:8080", nil))
      }
      
    • 说明:这个示例使用gorilla/websocket库创建了一个简单的WebSocket服务器。当客户端连接到服务器时,它会将接收到的消息回显给客户端[^1^]。

综上所述,这些实例涵盖了Go语言网络编程中的多种常见场景,包括TCP通信、HTTP服务、并发处理以及WebSocket通信。通过学习和实践这些实例,你可以更好地理解Go语言的网络编程模型,并掌握构建高效、可靠网络应用的技能。

目录
相关文章
|
5天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
23 2
|
3天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
11 2
|
3天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
14 2
|
6天前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
3天前
|
Go
go语言中的 跳转语句
【11月更文挑战第4天】
10 4
|
3天前
|
JSON 安全 Go
Go语言中使用JWT鉴权、Token刷新完整示例,拿去直接用!
本文介绍了如何在 Go 语言中使用 Gin 框架实现 JWT 用户认证和安全保护。JWT(JSON Web Token)是一种轻量、高效的认证与授权解决方案,特别适合微服务架构。文章详细讲解了 JWT 的基本概念、结构以及如何在 Gin 中生成、解析和刷新 JWT。通过示例代码,展示了如何在实际项目中应用 JWT,确保用户身份验证和数据安全。完整代码可在 GitHub 仓库中查看。
14 1
|
5天前
|
Go 调度 开发者
探索Go语言中的并发模式:goroutine与channel
在本文中,我们将深入探讨Go语言中的核心并发特性——goroutine和channel。不同于传统的并发模型,Go语言的并发机制以其简洁性和高效性著称。本文将通过实际代码示例,展示如何利用goroutine实现轻量级的并发执行,以及如何通过channel安全地在goroutine之间传递数据。摘要部分将概述这些概念,并提示读者本文将提供哪些具体的技术洞见。
|
4月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解
|
4月前
|
Java API 网络安全
Java网络编程入门
Java网络编程入门
|
4月前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解