ホームページ > バックエンド開発 > Golang > Golang を使用した最初のプロジェクト

Golang を使用した最初のプロジェクト

王林
リリース: 2024-09-09 20:31:32
オリジナル
982 人が閲覧しました

My First Project using Golang

?パート 1: Go を使用したファイル操作

? はじめに

JavaScript で長年の経験を持つフロントエンド開発者として、私は新たな挑戦をする時期が来たと判断しました。今年、私は Golang の世界に飛び込むことにしました。自分のスキルをテストし、実用的なツールを自分の武器庫に追加するために、私はファイル オーガナイザーを作成しました。ファイル オーガナイザーは、混乱したファイル管理に秩序をもたらすように設計されたコマンド ライン ツールです。 ?

大規模なプロジェクトを終えたばかりで、ディレクトリが画像、音声ファイル、ビデオ、ドキュメントで混沌とした状態になっていると想像してください。それは、美しく装飾された家があるのに、すべての家具が無造作に捨てられているようなものです。 ?行ったことあるけど全然面白くなかった!

冒険の最初の部分では、Go でのファイル操作の基本に焦点を当て、拡張子に基づいてファイルを適切なフォルダーに分類して整理する方法を学びます。飛び込む準備はできていますか?行きましょう!

?️‍♂️ チャレンジ

乱雑なディレクトリに圧倒されたと感じたことはありますか?画像ファイル、オーディオ クリップ、ビデオ、ドキュメントがすべて混在しています。手作業でそれらを分類するのは、干し草の山から針を探すような気分になるかもしれません。 ?

? 私たちの英雄的な解決策

私たちはこの混乱を組織化された楽園に変えるツールを構築するつもりです!ファイル オーガナイザーは、ファイルを種類に基づいて自動的にフォルダーに分類します (画像はこちら、音声はこちら、ビデオはこちら、ドキュメントはきちんと収納)。 ?

?️ 私たちがどのようにしてそれを実現したか

この驚異的なファイル並べ替えをどのようにして実現したかを次に示します:

1. ディレクトリパスの取得

私たちの旅は、ファイルがどこに隠れているかを見つけることから始まります:

dir := os.Args[1]
ログイン後にコピー

この行は、プログラムに「ファイルがいっぱいのディレクトリはどこですか?」と尋ねるようなものです。 ?

2. ディレクトリの読み取り

次に、そのディレクトリ内を覗いて、そこに何が入っているかを確認する必要があります:

files, err := os.ReadDir(dir)
var filesToOrder []string

if err != nil {
    log.Fatal(err)
}
ログイン後にコピー

ディレクトリの内容を読み取り、ディレクトリが存在しないなど、何か問題が発生した場合は、プログラムが停止して通知します。 ?

3. ディレクトリをスキップする

ここで、ディレクトリはそのままにして、ファイルに焦点を当てる必要があります。

for _, file := range files {
    if file.IsDir() {
        continue
    }
    filesToOrder = append(filesToOrder, file.Name())
}
ログイン後にコピー

ここでは、各項目をループします。ディレクトリの場合はスキップします。ファイルの場合は、整理するファイルのリストに追加します。 ?️

4. ファイルの並べ替え

ファイルのリストが準備できたら、ファイルを新しいホームに分類します。

for _, fileName := range filesToOrder {
    fileType := determineType(fileName)

    switch fileType {
    case IMAGE_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "images"))
    case AUDIO_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "audio"))
    case VIDEO_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "videos"))
    case DOCUMENT_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "documents"))
    default:
        fmt.Printf("Unsupported file type: %s\n", fileName)
    }
}
ログイン後にコピー

各ファイルをループして、そのタイプを判断し、適切なフォルダーに送信します。認識できないファイルの種類が見つかった場合は、お知らせします。 ?

5. ファイルタイプの決定

どのような種類のファイルを扱っているかを確認するには、次の便利な関数を使用します。

func determineType(file string) int {
    for key, value := range ALLOWED_TYPES {
        for _, ext := range value {
            if strings.HasSuffix(file, ext) {
                return key
            }
        }
    }
    return UNDEFINED_TYPE
}
ログイン後にコピー

ファイルの拡張子をリストと照合して、それが画像、音声、ビデオ、ドキュメントのいずれであるかを示します。 ?️‍♂️

6. ファイルを新しいホームに移動する

最後に、各ファイルを新しいフォルダーに移動します。

func moveToFolder(src, dest string) error {
    if _, err := os.Stat(dest); os.IsNotExist(err) {
        err := os.Mkdir(dest, 0777)
        if err != nil {
            return err
        }
    }

    fileName := filepath.Base(src)

    err := os.Rename(src, filepath.Join(dest, fileName))

    if err != nil {
        return err
    }

    return nil
}
ログイン後にコピー

宛先フォルダーが存在するかどうかを確認し、必要に応じて作成します。次に、ファイルを古い場所から新しい場所に移動します。 ?

7. サポートされていないファイル形式の処理

どのカテゴリにも当てはまらないファイルについては、次のように通知されます。

default:
    fmt.Printf("Unsupported file type: %s\n", fileName)
ログイン後にコピー

サポートされていないファイル タイプについてはメッセージが出力されるため、何が整理されていないのかが正確にわかります。 ?


これでパート 1 は終わりです! ? Go でのファイル操作の基本にうまく取り組み、ファイルを適切なカテゴリに分類することができました。しかし、ここで考えてみましょう。「アーカイブ」や「プロジェクト」などの新しいカテゴリを追加したい場合はどうすればよいでしょうか?現時点では、マップに飛び込んでコードを微調整する必要があります。 ?

このツールを使用しているのがあなただけである場合、このアプローチは最適です。しかし、この素晴らしいツールを Go を知らない友人と共有することを想像してみてください。 ?️ コードを理解する必要がなく、誰でも簡単にカスタマイズできるようにしたいと考えています。

恐れる必要はありません。次のパートでは、ファイル オーガナイザー ツールをさらに深く掘り下げ、これらの課題に対処する高度な機能を明らかにします。 ? Go コードを 1 行も記述することなく、誰でもツールを微調整したり強化したりできるようにします。興味をそそられましたか?乞うご期待!

ご質問や詳細が必要ですか?以下にドロップしてチャットしましょう! ?



以上がGolang を使用した最初のプロジェクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート