网络

56 阅读2分钟

网络编程

Go语言内置了对TCP/IP、HTTP、WebSocket等常见网络协议的支持,同时也提供了灵活的函数和包,使得网络编程变得非常简单和高效。

```package main

import (
    "fmt"
    "net"
)

func main() {
    fmt.Println("Starting server...")
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println("Error starting server:", err)
        return
    }
    defer listener.Close()
    for {
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("Error accepting connection:", err)
            continue
        }
        go handleConnection(conn)
    }
}

func handleConnection(conn net.Conn) {
    defer conn.Close()
    buffer := make([]byte, 1024)
    for {
        n, err := conn.Read(buffer)
        if err != nil {
            fmt.Println("Error reading data:", err)
            return
        }
        if n == 0 {
            break
        }
        fmt.Println("Received data:", string(buffer[:n]))
        conn.Write([]byte("Message received."))
    }
}

客户端程序:

```package main

import (
    "fmt"
    "net"
)

func main() {
    fmt.Println("Starting client...")
    conn, err := net.Dial("tcp", "localhost:8080")
    if err != nil {
        fmt.Println("Error connecting to server:", err)
        return
    }
    defer conn.Close()
    message := []byte("Hello, server.")
    conn.Write(message)
    buffer := make([]byte, 1024)
    n, err := conn.Read(buffer)
    if err != nil {
        fmt.Println("Error reading data:", err)
        return
    }
    fmt.Println("Received data:", string(buffer[:n]))
}

上述代码中,服务器在端口8080上监听着所有传入的TCP连接,并在接收到连接请求后启动一个新的Goroutine来处理该连接。handleConnection函数用来处理具体的连接逻辑,它接收一个net.Conn参数,从该连接中读取数据,并将接收到的信息回显给客户端。客户端程序连接上服务器,并发送一条消息Hello, server.,然后等待服务器回复,并打印回复结果。

部署

Go语言的部署非常简单和方便,具体可以通过以下方式进行部署:

  1. 生成可执行文件

使用go build命令,可以将Go源代码编译成本地可执行文件,例如: go build main.go 这将生成一个名为main的可执行文件。

  1. 打包成Docker镜像

使用Docker可以将应用程序部署到容器中,并进行快速启动和运行。可以通过以下方式将Go应用程序打包成Docker镜像:

  • 创建一个名为Dockerfile的文件,文件中指定了使用哪个镜像,如何打包、安装以及运行应用程序,例如:
  • FROM golang:alpine3.14 WORKDIR /app COPY main.go . RUN go mod init RUN go build -o /app/main . EXPOSE 8080 CMD ["/app/main"]
  • 这里使用了Alpine Linux做基础镜像,然后将Go应用程序的源代码拷贝到容器中,并编译成可执行文件。最后将容器监听的端口暴露出来,并指定了容器启动时运行的命令。