我目前正在学习如何使用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)
}
因此,每个fmt.Println(finalFileContent.Write(subFileContent))
都会显示 6161 ,因此我假设 Write()方法已正确执行。
但fmt.Printf(">>> %#v", finalFileContent)
没有显示任何内容。绝对没有(甚至没有显示“&gt;&gt;&gt;”!)而且上面的注释行也是如此。
有趣的部分是字符串“你不工作吗?:'(”正确显示......
你知道为什么吗? 你知道如何解决这个问题吗?提前致谢!
答案 0 :(得分:1)
你忽略了一些错误。运行以下版本的代码时,您的结果是什么?
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:
8(0x8)
没有足够的存储空间来处理此命令。
Windows控制台的格式化输出溢出缓冲区(大约64KB)。
有一个相关的Go开放问题:
Issue 3376: windows: detect + handle console in os.File.Write