human
Golang Languageでプログラムを書くのを手伝ってください
最初の提案：バッチでネットワーク画像のウェブサイトを送信するために使用されるページがあります。このページには、マルチラインテキストボックスと送信ボタンが含まれています
2番目の提案：送信されたデータを受信した後、ダウンロードしてダウンロードするためにスレッドの数をカスタマイズできるマルチスレッドを使用してください
3番目の提案：スレッドを3〜10秒間ダウンロードするためにランダムな3〜10秒を実行します
4番目の提案：これらの写真は、指定されたLinuxユーザーのディレクトリに保存され、ファイル名「yyyyy-mm-dd」+4ビット文字とランダムテキスト文字列の形式に保存されます
5番目の提案：ユーザーがアクセスできるようにするダウンロードのダウンロードされた写真を生成します
6番目の提案：これらの生成された画像リンクを印刷して、訪問者に戻ります
7回目の提案：プログラムのプログラムセグメントを中国の注釈で追加する
gpt
このプログラムを書くのを手伝ってくれてうれしいです！以下は、GO言語を使用してこのプログラムを実装するコードです。

    パッケージメイン

    インポート（インポート）（
        「FMT」
        「io/ioutil」
        "ログ"
        「数学/ランド」
        「net/http」
        「OS」
        「strconv」
        「弦」
        「同期」
        "時間"
    治す

    //ダウンロードされたダウンロードを保存するために使用される画像リンクアドレス
    var imageLinks []文字列

    func main（）{
        // HTTPサーバーを作成し、ポートを監視します
        http.handlefunc（ "/submit"、submithandler）
        log.fatal（http.listenndserve（ "：8080"、nil））
    }

    //処理プログラムを送信します
    func submithandler（w http.responsewriter、r *http.request）{
        r.method！= "post"の場合{
            // POSTリクエストが必要ない場合は、エラーを返します
            http.error（w、 "method not aot"、http.statusmethodnotallowed）
            戻る
        }

        // POSTリクエスト本体のデータを分析します
        ボディ、err：= ioutil.readall（R.Body）
        if er！= nil {
            http.error（w、 "bad request"、http.statusbadrequest）
            戻る
        }
        urls：= strings.split（string（body）、 "\ n"）

        //すべてのダウンロードスレッドが完了するのを待つための待機グループを作成します
        var wg sync.waitgu
        wg.add（len（urls）））

        //すべてのURLを通過してダウンロードスレッドを起動します
        _、url：= range urls {
            go func（url string）{
                wg.done（）を延期する
                downloadimage（url）
            }（url）
        }

        //すべてのダウンロードスレッドが完了するのを待っています
        wg.wait（）

        //画像リンクアドレスを生成し、訪問者に戻ります
        _、link：= range imageLinks {
            fmt.fprintln（w、link）
        }
    }

    //写真をダウンロードします
    func downloadimage（url string）{
        // httpを送信してリクエストを取得して画像コンテンツを取得します
        rep、err：= http.get（url）
        if er！= nil {
            log.printf（ "エラーダウンロード％s：％v"、url、err）
            戻る
        }
        desp.body.close（）

        //ファイル名と接尾辞を分析します
        パーツ：= strings.split（url、 "/"）
        ファイル名：=パーツ[len（part）-1]
        ext：= strings.split（filename、 "。"）[1]

        //ストレージパスを生成します
        dir：= "/home/user/images/"
        _、err：= os.stat（dir）; os.isnotexist（err）{
            os.mkdir（dir、0755）
        }
        rand.seed（time.now（）。unixnano（））
        randstr：= strconv.itoa（rand.intn（10000）））
        SavePath：= fmt.sprintf（ "％s％s-％s。％s"、dir、time.now（）。format（ "2006-01-02"）、randstr、ext）

        //画像ファイルを保存します
        ファイル、err：= os.create（savepath）
        if er！= nil {
            log.printf（ "エラー保存％s：％v"、url、err）
            戻る
        }
        defer file.close（）
        _、err = ioutil.readall（resp.body）
        if er！= nil {
            log.printf（ "エラー保存％s：％v"、url、err）
            戻る
        }
        resp.body = ioutil.nopcloser（bytes.newreader（b））
        _、err = io.copy（file、resp.body）
        if er！= nil {
            log.printf（ "エラー保存％s：％v"、url、err）
            戻る
        }

        //画像リンクアドレスを生成します
        リンク：= fmt.sprintf（ "http://example.com/images/%S-%S.%S"、time.now（）。形式（ "2006-01-02"）、RandStr、ext）

        //写真を追加します
        ImageLinks = append（ImageLinks、link）、link）

        //ランダムな時間間隔を待っています
        time.sleep（time.duration（rand.intn（8）+3） * time.second）
    }

このプログラムの実装には、次の手順があります。

1. HTTPサーバーを作成し、ポートを監視します。
2. POSTリクエストを受信するときは、リクエスト本文のすべてのURLを解決し、対応するダウンロードスレッドを起動します。
3.各URLから画像をダウンロードし、指定されたディレクトリに保存し、アクセスできるリンクアドレスを生成します。
4.ダウンロードタスクをダウンロードした後、3〜10秒のランダムな時間間隔が3〜10秒間ランダム間隔を待っています。
5.すべてのダウンロードスレッドが完了したら、生成されたすべての画像リンクを訪問者に返します。

このプログラムがあなたを助けることができることを願っています！
human
関数の機能を説明できますか？