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语言的网络编程模型,并掌握构建高效、可靠网络应用的技能。

目录
相关文章
|
11天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
52 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
30天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67
|
6天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
33 12
|
17天前
|
数据采集 监控 安全
公司网络监控软件:Zig 语言底层优化保障系统高性能运行
在数字化时代,Zig 语言凭借出色的底层控制能力和高性能特性,为公司网络监控软件的优化提供了有力支持。从数据采集、连接管理到数据分析,Zig 语言确保系统高效稳定运行,精准处理海量网络数据,保障企业信息安全与业务连续性。
37 4
|
9天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
19 0
|
23天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
20天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
59 17
|
30天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
1月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
49 10