search
HomeBackend DevelopmentGolangDiscuss how to transfer files in Golang

With the development of the Internet, file transfer has become an indispensable part of modern society. In programming, file transfer is often necessary, especially in network programming. Golang is a concurrent programming language that is efficient to write and easy to maintain, and it also has many solutions for file transfer. In this article, we will explore how to transfer files in Golang.

1. Use the http package to transfer files

In Golang, you can use the http package to quickly and easily implement file transfer. To do this, we need to create an HTTP server that will respond to client requests and send files to the client.

For example, we can create the following server:

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(responseWriter http.ResponseWriter, request *http.Request) {
        http.ServeFile(responseWriter, request, "example.txt")
    })

    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        fmt.Println(err)
    }
}

The above code creates an HTTP server whose main function is to send a file named "example.txt" as a response to the client end. The http.HandleFunc function is used here, which registers "/" as the path and an anonymous function as the handler function. This anonymous function uses the http.ServeFile function to read and send the file. Finally, print error information when err != nil.

It should be noted that before transferring the file, we need to create a text file named "example.txt" and save it in the server directory.

2. Use TCP to transfer files

In Golang, we can also use TCP protocol to transfer files. This method requires creating a client and server to transfer files between them. Here, we need to use the net package, which provides some utility functions and types for socket-based network programming.

The following is an example of using the TCP protocol to transfer files:

  • Server:
package main

import (
    "fmt"
    "net"
    "os"
)

func main() {
    // 创建TCP监听器,监听请求
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        fmt.Println("Error listening:", err.Error())
        os.Exit(1)
    }
    defer listener.Close()
    fmt.Println("Listening on :8080")

    // 开始监听
    for {
        // 等待客户端连接
        conn, err := listener.Accept()
        if err != nil {
            fmt.Println("Error accepting:", err.Error())
            continue
        }

        // 先读取文件名,再读取文件
        fileName := make([]byte, 64)
        _, err = conn.Read(fileName)
        if err != nil {
            fmt.Println("Error reading filename:", err.Error())
            continue
        }
        file, err := os.Create(string(fileName))
        if file != nil {
            defer file.Close()
        }
        if err != nil {
            fmt.Println("Error create file:", err.Error())
            continue
        }

        // 开始读取文件内容,并写入本地文件
        buf := make([]byte, 1024)
        for {
            n, err := conn.Read(buf)
            if err != nil {
                fmt.Println("Error reading content:", err.Error())
                break
            }
            if n == 0 {
                break
            }
            _, err = file.Write(buf[:n])
            if err != nil {
                fmt.Println("Error writing to file:", err.Error())
                break
            }
        }
        fmt.Printf("Receive file %s success\n", string(fileName))
    }
}

The above code creates a TCP server, which will Listen to client requests, read the file content through the file name, and save the file in the current directory. Next, we will send a file to this server through the following client program:

  • Client:
package main

import (
    "fmt"
    "io/ioutil"
    "net"
    "os"
)

func main() {
    // 打开本地文件
    file, err := os.Open("example.txt")
    if err != nil {
        fmt.Println("Error open file:", err.Error())
        os.Exit(1)
    }
    defer file.Close()

    // 连接服务端
    conn, err := net.Dial("tcp", "127.0.0.1:8080")
    if err != nil {
        fmt.Println("Error connect to server:", err.Error())
        os.Exit(1)
    }
    defer conn.Close()

    // 先发送文件名,再发送文件内容
    fileName := "example.txt"
    _, _ = conn.Write([]byte(fileName))
    content, err := ioutil.ReadFile(fileName)
    if err != nil {
        fmt.Println("Error Read file:", err.Error())
        os.Exit(1)
    }

    _, err = conn.Write(content)
    if err != nil {
        fmt.Println("Error send file:", err.Error())
        os.Exit(1)
    }
    fmt.Println("Send success")
}

The client can send a file named "example. txt" file to the TCP server we created before. The client sends file information to the server by opening a local file and using net.Dial and conn.Write.

Summary:

In Golang, we can use HTTP and TCP protocols to transfer files. The implementation of the HTTP protocol is usually simpler and more convenient, but in some cases it may be more helpful to use the TCP protocol, such as when large files need to be transferred or precise control of file transfers is required. Understanding the pros and cons of both transfer methods and matching them to your needs is crucial to completing a successful file transfer.

The above is the detailed content of Discuss how to transfer files in Golang. For more information, please follow other related articles on the PHP Chinese website!

Statement
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
Using init for Package Initialization in GoUsing init for Package Initialization in GoApr 24, 2025 pm 06:25 PM

In Go, the init function is used for package initialization. 1) The init function is automatically called when package initialization, and is suitable for initializing global variables, setting connections and loading configuration files. 2) There can be multiple init functions that can be executed in file order. 3) When using it, the execution order, test difficulty and performance impact should be considered. 4) It is recommended to reduce side effects, use dependency injection and delay initialization to optimize the use of init functions.

Go's Select Statement: Multiplexing Concurrent OperationsGo's Select Statement: Multiplexing Concurrent OperationsApr 24, 2025 pm 05:21 PM

Go'sselectstatementstreamlinesconcurrentprogrammingbymultiplexingoperations.1)Itallowswaitingonmultiplechanneloperations,executingthefirstreadyone.2)Thedefaultcasepreventsdeadlocksbyallowingtheprogramtoproceedifnooperationisready.3)Itcanbeusedforsend

Advanced Concurrency Techniques in Go: Context and WaitGroupsAdvanced Concurrency Techniques in Go: Context and WaitGroupsApr 24, 2025 pm 05:09 PM

ContextandWaitGroupsarecrucialinGoformanaginggoroutineseffectively.1)ContextallowssignalingcancellationanddeadlinesacrossAPIboundaries,ensuringgoroutinescanbestoppedgracefully.2)WaitGroupssynchronizegoroutines,ensuringallcompletebeforeproceeding,prev

The Benefits of Using Go for Microservices ArchitectureThe Benefits of Using Go for Microservices ArchitectureApr 24, 2025 pm 04:29 PM

Goisbeneficialformicroservicesduetoitssimplicity,efficiency,androbustconcurrencysupport.1)Go'sdesignemphasizessimplicityandefficiency,idealformicroservices.2)Itsconcurrencymodelusinggoroutinesandchannelsallowseasyhandlingofhighconcurrency.3)Fastcompi

Golang vs. Python: The Pros and ConsGolang vs. Python: The Pros and ConsApr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

Golang and C  : Concurrency vs. Raw SpeedGolang and C : Concurrency vs. Raw SpeedApr 21, 2025 am 12:16 AM

Golang is better than C in concurrency, while C is better than Golang in raw speed. 1) Golang achieves efficient concurrency through goroutine and channel, which is suitable for handling a large number of concurrent tasks. 2)C Through compiler optimization and standard library, it provides high performance close to hardware, suitable for applications that require extreme optimization.

Why Use Golang? Benefits and Advantages ExplainedWhy Use Golang? Benefits and Advantages ExplainedApr 21, 2025 am 12:15 AM

Reasons for choosing Golang include: 1) high concurrency performance, 2) static type system, 3) garbage collection mechanism, 4) rich standard libraries and ecosystems, which make it an ideal choice for developing efficient and reliable software.

Golang vs. C  : Performance and Speed ComparisonGolang vs. C : Performance and Speed ComparisonApr 21, 2025 am 12:13 AM

Golang is suitable for rapid development and concurrent scenarios, and C is suitable for scenarios where extreme performance and low-level control are required. 1) Golang improves performance through garbage collection and concurrency mechanisms, and is suitable for high-concurrency Web service development. 2) C achieves the ultimate performance through manual memory management and compiler optimization, and is suitable for embedded system development.

See all articles

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

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools