package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) func main() { //只读方式打开文件 file ,err := os.Open("./main.go") if err != nil { fmt.Println(err)//打开文件失败 return } defer file.Close() //操作完成之后关闭文件流 fmt.Println(file) //读取文件内容 --方法一 var strSilce []byte var tempSilce = make([]byte,128) //每次读取128个字节 for { n,err := file.Read(tempSilce) //返回读取的字节数 读取的内容放在tempSilce切片中 if err == io.EOF{ //表示读取完毕 fmt.Println("读取完成") break } if err != nil{ fmt.Println(err) //读取文件失败 return } fmt.Println(n) strSilce = append(strSilce,tempSilce[:n]...) //tempSilce[:n] 读取了多少个字节 就拿切片里面多少个字节 (考虑场景最后有不足字节的情况) } fmt.Println(string(strSilce)) //切片转字符串 //读取文件内容 --方法二(bufio) var fileStr string reader := bufio.NewReader(file) for { str ,err := reader.ReadString(' ') // 为分隔符 表示一次读取一行 if err == io.EOF{ fileStr += str //读取完成 可能还有返回值 fmt.Println("读取完成") break } if err != nil { fmt.Println(err) } fileStr += str } fmt.Println(fileStr) //读取文件内容 --方法三(ioutil) 不需要os.open (其他两种都是以文件流的形式读取 这个不是) byteStr,err := ioutil.ReadFile("./main.go") if err != nil { fmt.Println(err) return } fmt.Println(string(byteStr)) }