3

私は現在、Go(またはgolang)を使用して開発する方法を学んでいますが、奇妙な問題があります。

それぞれのすべてのソースを取得するために、HTMLファイル内を調べるスクリプトを作成しようとしていますタグ。スクリプトの目的は、取得したすべてのファイルをマージすることです。

これで話は終わりです。今のところ、各JavaScriptファイルのコンテンツを取得することはできますが、連結することはできません。

あなたは私のスクリプトの下に見ることができます:

//Open main file
mainFilePath := "/path/to/my/file.html"
mainFileDir := path.Dir(mainFilePath)+"/"

mainFileContent, err := ioutil.ReadFile(mainFilePath)

if err == nil {
    mainFileContent := string(mainFileContent)
    var finalFileContent bytes.Buffer

    //Start RegExp searching for JavaScript src
    scriptReg, _ := regexp.Compile("<script src=\"(.*)\">")
    scripts := scriptReg.FindAllStringSubmatch(mainFileContent,-1)

    //For each SRC found...
    for _, path := range scripts {
        //We open the corresponding file
        subFileContent, err := ioutil.ReadFile(mainFileDir+path[1])

        if err == nil {
            //And we add its content to the "final" variable
            fmt.Println(finalFileContent.Write(subFileContent))
        } else {
            fmt.Println(err)
        }
    }

    //Try to display the final result
    // fmt.Println(finalFileContent.String())
    fmt.Printf(">>> %#v", finalFileContent)
    fmt.Println("Y U NO WORKS? :'(")

} else {
    fmt.Println(err)
}

したがって、それぞれが6161fmt.Println(finalFileContent.Write(subFileContent))のようなものを表示するので、Write()メソッドが正しく実行されていると思います。

しかし、fmt.Printf(">>> %#v", finalFileContent)何も表示されません。絶対に何もありません(> >>>も表示されません!)そして、すぐ上のコメント行についても同じです。

面白いのは、文字列「YU NO WORK?:'(」が正しく表示されることです。..

なぜなのかご存知ですか?そして、あなたはこの問題を解決する方法を知っていますか?

前もって感謝します!

4

1 に答える 1

2

あなたはいくつかのエラーを無視しています。次のバージョンのコードを実行すると、どのような結果になりますか?

package main

import (
    "bytes"
    "fmt"
    "io/ioutil"
    "path"
    "regexp"
)

func main() {
    //Open main file
    mainFilePath := "/path/to/my/file.html"
    mainFileDir := path.Dir(mainFilePath) + "/"

    mainFileContent, err := ioutil.ReadFile(mainFilePath)

    if err == nil {
        mainFileContent := string(mainFileContent)
        var finalFileContent bytes.Buffer

        //Start RegExp searching for JavaScript src
        scriptReg, _ := regexp.Compile("<script src=\"(.*)\">")
        scripts := scriptReg.FindAllStringSubmatch(mainFileContent, -1)

        //For each SRC found...
        for _, path := range scripts {
            //We open the corresponding file
            subFileContent, err := ioutil.ReadFile(mainFileDir + path[1])

            if err == nil {
                //And we add its content to the "final" variable

                // fmt.Println(finalFileContent.Write(subFileContent))
                n, err := finalFileContent.Write(subFileContent)
                fmt.Println("finalFileContent Write:", n, err)

            } else {
                fmt.Println(err)
            }
        }

        //Try to display the final result
        // fmt.Println(finalFileContent.String())

        // fmt.Printf(">>> %#v", finalFileContent)
        n, err := fmt.Printf(">>> %#v", finalFileContent)
        fmt.Println()
        fmt.Println("finalFileContent Printf:", n, err)

        fmt.Println("Y U NO WORKS? :'(")

    } else {
        fmt.Println(err)
    }
}

アップデート:

ステートメント:

fmt.Println("finalFileContent Printf:", n, err)

出力:

finalFileContent Printf: 0 write /dev/stdout: winapi error #8

また

finalFileContent Printf: 0 write /dev/stdout: Not enough storage is available to process this command.

MSDNから:

ERROR_NOT_ENOUGH_MEMORY

8(0x8)

このコマンドを処理するのに十分なストレージがありません。

Windowsコンソールへのフォーマットされた出力は、バッファー(約64KB)をオーバーフローします。

関連するGoの未解決の問題があります。

問題3376:ウィンドウ:os.File.Writeでコンソールを検出して処理する

于 2012-08-02T23:35:34.113 に答える