String 无法在多次分配中将[]字节分配给z(类型字符串)

String 无法在多次分配中将[]字节分配给z(类型字符串),string,go,byte,String,Go,Byte,我试图在一个文件夹中找到文件的内容,所以我列出了文件夹中的内容,然后在其中循环,我试图读取文件 files, _ := ioutil.ReadDir("documents/") for _, f := range files { //fmt.Println(f.Name()) z := "documents/" + f.Name() fmt.Println(z) // prints out 'documents/*doc

我试图在一个文件夹中找到文件的内容,所以我列出了文件夹中的内容,然后在其中循环,我试图读取文件

files, _ := ioutil.ReadDir("documents/")
for _, f := range files {
        //fmt.Println(f.Name())

    z := "documents/" + f.Name()
    fmt.Println(z) // prints out 'documents/*doc name*' recursively
    z, err := ioutil.ReadFile(z) // This line throws up the error

我得到的错误是:test.go:85:无法在多重赋值中将[]字节赋值给z(类型字符串)。

您可以将[]字节转换为字符串,但无法转换多重返回值函数的一个值

buf, err := ioutil.ReadFile(z)
if err != nil {
        log.Fatal(err)
}
z = string(buf)

但是,通常最好不要将二进制数据转换为字符串,而直接使用
buf

这对我很有效,谢谢!我注意到你用了“=”而不是“:=”,为什么?再次感谢你的帮助@Patrick
=
用于声明变量,如
var x[]string
这是声明这种类型的变量;然而,
:=
是同样的事情(声明一个变量),只是让编译器决定变量的类型,这样您就不必显式地键入它。注意
:=
这只能在函数中完成@帕特里克:这是一个简短的变量声明。它是带有初始值设定项表达式但没有类型的正则变量声明的缩写。看见