大規模ファイル転送における 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というファイル名で書き込みます。
上記のコード例は、単なる簡単な実装であり、ネットワークの切断など問題が発生する可能性があります。実際の使用では、より多くのエラーケースを処理し、ネットワーク転送のパフォーマンスを最適化する必要があります。