Go での FTP の使用: 完全ガイド
インターネットの急速な発展に伴い、ファイル転送プロトコル (FTP) は常に重要なファイル転送方法となっています。 Go 言語では、FTP を使用してファイルを転送することが多くの開発者のニーズとなる可能性があります。しかし、Go言語でのFTPの使い方がわからない人も多いのではないでしょうか。この記事では、FTPサーバーへの接続からファイル転送まで、Go言語でFTPを使う方法と、エラーや例外の処理方法について解説します。
FTP 接続の作成
Go 言語では、標準の「net」パッケージを使用して FTP サーバーに接続し、ファイル転送操作を実行できます。まず、FTP 接続を確立する必要があります。 「net.Dial」機能を使用すると、FTP サーバーと通信するためのネットワーク接続を作成できます。この例では、FTP サーバーを使用します。
package main import ( "fmt" "net" ) func main() { conn, err := net.Dial("tcp", "ftp.mozilla.org:21") if err != nil { fmt.Println("Error connecting to server:", err) return } fmt.Println("Connected to server") conn.Close() }
FTP クライアントを使用してサーバーにログインする
接続が確立されたら、FTP クライアントを使用してログインする必要があります。 「net/textproto」パッケージの「NewConn」関数を使用すると、FTP サーバーと通信するための読み取り/書き込み接続を作成できます。次に、「ログイン」機能を使用して認証する必要があります。
package main import ( "fmt" "net" "net/textproto" ) func main() { conn, err := net.Dial("tcp", "ftp.mozilla.org:21") if err != nil { fmt.Println("Error connecting to server:", err) return } defer conn.Close() fmt.Println("Connected to server") client := textproto.NewConn(conn) _, err = client.Cmd("USER anonymous") if err != nil { fmt.Println("Error sending user command:", err) return } _, err = client.Cmd("PASS password") if err != nil { fmt.Println("Error sending password command:", err) return } fmt.Println("Logged in as anonymous") }
FTP クライアント コマンド
FTP クライアント コマンドは、コマンドを文字列の形式で FTP サーバーに送信します。一般的な FTP クライアント コマンドは次のとおりです。
- USER - FTP サーバーにログインするためのユーザー名。
- PASS - FTP サーバーにログインするためのパスワード。
- PWD - 現在のサーバー ディレクトリを表示します。
- CWD - 現在のサーバー ディレクトリを変更します。
- LIST - 現在のディレクトリのファイルとサブディレクトリを一覧表示します。
- RETR - サーバーからファイルをダウンロードします。
- STOR - ファイルをサーバーにアップロードします。
- DELE - サーバー上のファイルを削除します。
- RNFR - ファイルソースの名前を変更します。
- RNTO - ファイルターゲットの名前を変更します。
FTP クライアント ファイルのアップロードとダウンロード
接続が確立され、FTP クライアント経由でログインしたら、ファイルを転送できます。 Go 言語では、FTP クライアントを使用したファイルの転送は非常に簡単です。ファイルをダウンロードするには「RETR」コマンドを、ファイルをアップロードするには「STOR」コマンドを使用するだけです。 「io」パッケージの「Copy」機能を使用すると、ファイルの内容を FTP サーバーからローカル ファイルにコピーしたり、ローカル ファイルの内容を FTP サーバーにコピーしたりできます。
FTP クライアントを使用してファイルをダウンロードする方法を見てみましょう。
package main import ( "fmt" "io" "net" "net/textproto" "os" ) func main() { conn, err := net.Dial("tcp", "ftp.mozilla.org:21") if err != nil { fmt.Println("Error connecting to server:", err) return } defer conn.Close() fmt.Println("Connected to server") client := textproto.NewConn(conn) _, err = client.Cmd("USER anonymous") if err != nil { fmt.Println("Error sending user command:", err) return } _, err = client.Cmd("PASS password") if err != nil { fmt.Println("Error sending password command:", err) return } fmt.Println("Logged in as anonymous") _, err = client.Cmd("TYPE I") if err != nil { fmt.Println("Error sending type command:", err) return } _, err = client.Cmd("PASV") if err != nil { fmt.Println("Error sending pasv command:", err) return } response, err := client.ReadLine() if err != nil { fmt.Println("Error reading pasv response:", err) return } fmt.Println(response) _, err = client.Cmd("RETR /pub/README.txt") if err != nil { fmt.Println("Error sending retr command:", err) return } response, err = client.ReadLine() if err != nil { fmt.Println("Error reading retr response:", err) return } fmt.Println(response) file, err := os.Create("README.txt") if err != nil { fmt.Println("Error creating file:", err) return } defer file.Close() _, err = io.Copy(file, conn) if err != nil { fmt.Println("Error copying file:", err) return } fmt.Println("Downloaded README.txt") }
FTP クライアントを使用してファイルをアップロードする方法を見てみましょう。
package main import ( "fmt" "io" "net" "net/textproto" "os" ) func main() { conn, err := net.Dial("tcp", "ftp.mozilla.org:21") if err != nil { fmt.Println("Error connecting to server:", err) return } defer conn.Close() fmt.Println("Connected to server") client := textproto.NewConn(conn) _, err = client.Cmd("USER anonymous") if err != nil { fmt.Println("Error sending user command:", err) return } _, err = client.Cmd("PASS password") if err != nil { fmt.Println("Error sending password command:", err) return } fmt.Println("Logged in as anonymous") _, err = client.Cmd("TYPE I") if err != nil { fmt.Println("Error sending type command:", err) return } _, err = client.Cmd("PASV") if err != nil { fmt.Println("Error sending pasv command:", err) return } response, err := client.ReadLine() if err != nil { fmt.Println("Error reading pasv response:", err) return } fmt.Println(response) _, err = client.Cmd("STOR /public_html/test.txt") if err != nil { fmt.Println("Error sending stor command:", err) return } file, err := os.Open("test.txt") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() _, err = io.Copy(conn, file) if err != nil { fmt.Println("Error copying file:", err) return } response, err = client.ReadLine() if err != nil { fmt.Println("Error reading store response:", err) return } fmt.Println(response) fmt.Println("Uploaded test.txt") }
エラーと例外の処理
ファイル転送に FTP クライアントを使用する場合、例外とエラーを処理することが非常に重要です。エラーが発生した場合、クライアントはユーザーが問題を特定して解決できるように、エラー情報をユーザーに返すことができる必要があります。以下は、エラーと例外を処理する方法を示す FTP クライアントを使用した例です。
package main import ( "fmt" "io" "net" "net/textproto" "os" ) func main() { conn, err := net.Dial("tcp", "ftp.mozilla.org:21") if err != nil { fmt.Println("Error connecting to server:", err) return } defer conn.Close() fmt.Println("Connected to server") client := textproto.NewConn(conn) _, err = client.Cmd("USER anonymous") if err != nil { fmt.Println("Error sending user command:", err) return } _, err = client.Cmd("PASS password") if err != nil { fmt.Println("Error sending password command:", err) return } fmt.Println("Logged in as anonymous") _, err = client.Cmd("TYPE I") if err != nil { fmt.Println("Error sending type command:", err) return } _, err = client.Cmd("PASV") if err != nil { fmt.Println("Error sending pasv command:", err) return } response, err := client.ReadLine() if err != nil { fmt.Println("Error reading pasv response:", err) return } fmt.Println(response) _, err = client.Cmd("RETR /pub/README.txt") if err != nil { fmt.Println("Error sending retr command:", err) return } response, err = client.ReadLine() if err != nil { fmt.Println("Error reading retr response:", err) return } fmt.Println(response) file, err := os.Create("README.txt") if err != nil { fmt.Println("Error creating file:", err) return } defer file.Close() _, err = io.Copy(file, conn) if err != nil { fmt.Println("Error copying file:", err) return } fmt.Println("Downloaded README.txt") _, err = client.Cmd("QUIT") if err != nil { fmt.Println("Error sending quit command:", err) return } }
結論
この記事では、FTP 接続の確立、FTP クライアントを使用した FTP サーバーへのログイン、FTP クライアント コマンド、ファイルのアップロードなど、Go 言語で FTP を使用する方法を学習しました。とダウンロード、およびエラーと例外を処理する方法。 FTP を使用してファイルを転送することは、多くの開発者のニーズかもしれませんが、標準ライブラリの「net」および「io」パッケージを使用して FTP 接続を作成し、ファイル転送を実行できるため、Go 言語で FTP クライアントを使用することは難しくありません。次に、この知識を使用して独自の FTP クライアントを開発したり、独自のファイル転送のニーズに対応したりできます。
以上がGo での FTP の使用: 完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...
