大規模ファイル転送における Go 言語の用途

Goでは、ioパッケージとosパッケージを利用することで大規模なファイルの転送が可能となります。以下はその実装例です。

まず、ネットワーク越しに通信可能なサーバー側とクライアント側を作成する必要があります。サーバー側のコードを次に示します。

package main

import (
    "io"
    "log"
    "net"
    "os"
)

func main() {
    // 创建监听端口
    listener, err := net.Listen("tcp", ":8080")
    if err != nil {
        log.Fatal(err)
    }
    defer listener.Close()

    // 接收客户端连接
    conn, err := listener.Accept()
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    // 创建文件来保存接收到的数据
    file, err := os.Create("received_file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // 从连接中读取数据并写入文件
    _, err = io.Copy(file, conn)
    if err != nil {
        log.Fatal(err)
    }

    log.Println("文件传输完毕")
}

次に、ファイルを転送するためのクライアントを作成する。クライアントのコードを以下に示す。

package main

import (
    "io"
    "log"
    "net"
    "os"
)

func main() {
    // 连接服务器端
    conn, err := net.Dial("tcp", "localhost:8080")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    // 打开待发送的文件
    file, err := os.Open("large_file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    // 从文件中读取数据并发送到服务器端
    _, err = io.Copy(conn, file)
    if err != nil {
        log.Fatal(err)
    }

    log.Println("文件传输完毕")
}

上記のコードでは、サーバー側はポート8080でLISTENし、クライアント側がサーバー側に接続すると、ファイルの内容がネットワーク経由でサーバー側に送られます。その後、サーバー側は受け取ったデータをreceived_file.txtというファイル名で書き込みます。

上記のコード例は、単なる簡単な実装であり、ネットワークの切断など問題が発生する可能性があります。実際の使用では、より多くのエラーケースを処理し、ネットワーク転送のパフォーマンスを最適化する必要があります。

bannerAds