在这篇文章中,我们讨论了如何在Golang中处理一个大文件。但你有没有遇到过这样的情况:只是想读取一个文件,并把它的全部内容加载到一个变量中,然后对其进行处理?我也经常遇到这样的情况。例如,从一个文件中读取一个特定的配置,而不知为何,这个文件总是在那里!我的意思是,你知道你需要那个文件。我是说你知道你需要这个文件来构建/运行你的应用程序。让我们用代码来谈一谈,设想我们有一个名为config.txt 的文件,内容如下:
I am a file that you need me ;)
并且想要读取这个文件:
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
)
func main() {
file, err := os.Open("config.txt")
if err != nil {
log.Fatalf("missing config file: %v", err)
}
content, err := ioutil.ReadAll(file)
if err != nil {
log.Fatalf("could not read config file: %v", err)
}
fmt.Println(string(content))
}
// output: I am a file that you need me ;)
如果上面的代码听起来很熟悉,我有个好消息要告诉你,Go提供了一个更好、更漂亮、更短的方法来做这件事。有一个叫embed的包在一行中为你做所有的事情。你所需要的只是在你的变量上方的指令中传递文件路径
package main
import (
_ "embed"
"fmt"
)
//go:embed config.txt
var content string
func main() {
fmt.Print(content)
}
// output: I am a file that you need me ;)
就这样!你在content变量中得到了文件的内容!你需要把它放在[]byte 吗?你只需要改变你的变量类型:
package main
import (
_ "embed"
"fmt"
)
//go:embed config.txt
var content []byte
func main() {
fmt.Print(content)
}
// output: [73 32 97 109 32 97 32 102 105 108 101 32 116 104 97 116 32 121 111 117 32 110 101 101 100 32 109 101 32 59 41]