Home Backend Development Golang How to use Go language for network programming

How to use Go language for network programming

Aug 02, 2023 pm 05:28 PM
use go language network programming

How to use Go language for network programming

1. Introduction
With the continuous development of the Internet, network programming plays an important role in modern software development. As a simple and efficient programming language, Go language has powerful network programming capabilities. This article will introduce how to use Go language for network programming, and attach some code examples to help readers better understand and use Go language for network development.

2. TCP network programming
TCP is a reliable transmission protocol and is widely used in Internet communications. The following code example demonstrates how to use Go language to build a simple TCP server:

package main

import (
    "fmt"
    "net"
)

func main() {
    // 监听地址和端口
    listen, err := net.Listen("tcp", "localhost:8888")
    if err != nil {
        fmt.Println("Listen error:", err)
        return
    }
    defer listen.Close()

    fmt.Println("Server is running...")

    for {
        // 等待客户端连接
        conn, err := listen.Accept()
        if err != nil {
            fmt.Println("Accept error:", err)
            continue
        }
        fmt.Println("Client connected:", conn.RemoteAddr().String())

        // 处理客户端请求
        go handleConn(conn)
    }
}

func handleConn(conn net.Conn) {
    defer conn.Close()

    for {
        // 读取客户端发送的数据
        buf := make([]byte, 1024)
        n, err := conn.Read(buf)
        if err != nil {
            fmt.Println("Read error:", err)
            return
        }

        // 输出客户端发送的数据
        fmt.Println("Received:", string(buf[:n]))

        // 向客户端发送数据
        conn.Write([]byte("Hello, client!"))
    }
}
Copy after login

The above code implements a simple TCP server, listening to the specified address by calling the net.Listen function and port, and then call the listen.Accept function in a loop to wait for the client to connect. When the client connects successfully, the handleConn function is called to process the connection.

In the handleConn function, read the data sent by the client through the conn.Read function, and send it to the client through the conn.Write function send data. In addition, the client's network address can also be obtained through the conn.RemoteAddr function.

3. HTTP network programming
HTTP is a network protocol widely used in Web development. Go language has a built-in powerful HTTP library to facilitate developers to perform HTTP network programming. The following code example shows how to write a simple HTTP server using Go language:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    // 注册一个处理函数
    http.HandleFunc("/", handler)

    // 启动HTTP服务器
    err := http.ListenAndServe(":8888", nil)
    if err != nil {
        fmt.Println("ListenAndServe error:", err)
        return
    }
}

func handler(w http.ResponseWriter, r *http.Request) {
    // 处理HTTP请求
    fmt.Fprintf(w, "Hello, client!")
}
Copy after login

The above code uses the http.HandleFunc function to register a handler function that will be used when the HTTP request arrives. is called. In the processing function, send an HTTP response to the client through http.ResponseWriter; use http.Request to obtain the client's request information, such as request path, request header, etc.

4. UDP network programming
UDP is an unreliable transmission protocol and is suitable for some scenarios that do not require high data reliability. The following code example demonstrates how to write a simple UDP server using Go language:

package main

import (
    "fmt"
    "net"
)

func main() {
    // 解析UDP地址
    addr, err := net.ResolveUDPAddr("udp", "localhost:8888")
    if err != nil {
        fmt.Println("ResolveUDPAddr error:", err)
        return
    }

    // 创建UDP连接
    conn, err := net.ListenUDP("udp", addr)
    if err != nil {
        fmt.Println("ListenUDP error:", err)
        return
    }
    defer conn.Close()

    fmt.Println("Server is running...")

    for {
        // 读取客户端发送的数据
        buf := make([]byte, 1024)
        n, remoteAddr, err := conn.ReadFromUDP(buf)
        if err != nil {
            fmt.Println("ReadFromUDP error:", err)
            continue
        }

        fmt.Println("Client connected:", remoteAddr.String())

        // 处理客户端请求
        go handleUDPConn(conn, remoteAddr, buf[:n])
    }
}

func handleUDPConn(conn *net.UDPConn, remoteAddr *net.UDPAddr, data []byte) {
    // 处理客户端请求
    fmt.Println("Received:", string(data))

    // 向客户端发送数据
    conn.WriteToUDP([]byte("Hello, client!"), remoteAddr)
}
Copy after login

The above code implements a simple UDP server and creates a UDP connection by calling the net.ListenUDP function , and then loops to call the conn.ReadFromUDP function to read the data sent by the client. After reading the data, call the handleUDPConn function to process the request, and send the data to the client through the conn.WriteToUDP function.

5. Summary
This article introduces how to use Go language for network programming, and provides code examples for TCP, HTTP and UDP network programming. By learning and using these code examples, readers can better master the network programming technology of Go language and provide assistance for actual project development. Network programming is a complex and complex job that requires continuous learning and practice. I hope this article will be helpful to readers.

The above is the detailed content of How to use Go language for network programming. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1655
14
PHP Tutorial
1253
29
C# Tutorial
1227
24
How to convert XML to PDF on your phone? How to convert XML to PDF on your phone? Apr 02, 2025 pm 10:18 PM

It is not easy to convert XML to PDF directly on your phone, but it can be achieved with the help of cloud services. It is recommended to use a lightweight mobile app to upload XML files and receive generated PDFs, and convert them with cloud APIs. Cloud APIs use serverless computing services, and choosing the right platform is crucial. Complexity, error handling, security, and optimization strategies need to be considered when handling XML parsing and PDF generation. The entire process requires the front-end app and the back-end API to work together, and it requires some understanding of a variety of technologies.

How to solve the user_id type conversion problem when using Redis Stream to implement message queues in Go language? How to solve the user_id type conversion problem when using Redis Stream to implement message queues in Go language? Apr 02, 2025 pm 04:54 PM

The problem of using RedisStream to implement message queues in Go language is using Go language and Redis...

What is the problem with Queue thread in Go's crawler Colly? What is the problem with Queue thread in Go's crawler Colly? Apr 02, 2025 pm 02:09 PM

Queue threading problem in Go crawler Colly explores the problem of using the Colly crawler library in Go language, developers often encounter problems with threads and request queues. �...

What should I do if the custom structure labels in GoLand are not displayed? What should I do if the custom structure labels in GoLand are not displayed? Apr 02, 2025 pm 05:09 PM

What should I do if the custom structure labels in GoLand are not displayed? When using GoLand for Go language development, many developers will encounter custom structure tags...

In Go, why does printing strings with Println and string() functions have different effects? In Go, why does printing strings with Println and string() functions have different effects? Apr 02, 2025 pm 02:03 PM

The difference between string printing in Go language: The difference in the effect of using Println and string() functions is in Go...

What libraries are used for floating point number operations in Go? What libraries are used for floating point number operations in Go? Apr 02, 2025 pm 02:06 PM

The library used for floating-point number operation in Go language introduces how to ensure the accuracy is...

What is the difference between `var` and `type` keyword definition structure in Go language? What is the difference between `var` and `type` keyword definition structure in Go language? Apr 02, 2025 pm 12:57 PM

Two ways to define structures in Go language: the difference between var and type keywords. When defining structures, Go language often sees two different ways of writing: First...

When using sql.Open, why does not report an error when DSN passes empty? When using sql.Open, why does not report an error when DSN passes empty? Apr 02, 2025 pm 12:54 PM

When using sql.Open, why doesn’t the DSN report an error? In Go language, sql.Open...

See all articles