Golang中bufio的接口转换问题探讨
Golang中bufio的接口转换问题探讨
我正在使用Go语言完成一些课程实验。我需要一个切片来存储bufio.Writer,以下是我的做法:
// 用于存储 bufio.Writer 的切片
var bufferQ []interface{}
// 将文件与缓冲区绑定
writer := bufio.NewWriter(file)
bufferQ = append(bufferQ,writer)
但是,当我使用以下语句调用它时:bufferQ[0].WriteString(str),编译器报错:
# command-line-arguments
.\test.go:25:12: bufferQ[0].WriteString undefined (type interface {} is interface with no methods)
.\test.go:26:12: bufferQ[0].Flush undefined (type interface {} is interface with no methods)
Compilation finished with exit code 2
我应该怎么做才能正确调用?
更多关于Golang中bufio的接口转换问题探讨的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
哇,这比我想象的要详细得多,非常感谢!
更多关于Golang中bufio的接口转换问题探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
li_tang:
我需要一个切片来存储 bufio.Writer
var bufferQ []*bufio.Writer
你的示例:
package main
import (
"bufio"
"os"
)
func main() {
//slice to store bufio.writer
var bufferQ []*bufio.Writer
var file *os.File
//bind file with buffer
writer := bufio.NewWriter(file)
bufferQ = append(bufferQ, writer)
var str string
if len(bufferQ) > 0 {
buffer := bufferQ[0]
_, err := buffer.WriteString(str)
if err != nil {
// handle error
}
err = buffer.Flush()
if err != nil {
// handle error
}
}
}
你需要将 interface{} 类型断言为 *bufio.Writer 来调用其方法。以下是修改后的代码示例:
// 用于存储 bufio.Writer 的切片
var bufferQ []interface{}
// 将文件与缓冲区绑定
writer := bufio.NewWriter(file)
bufferQ = append(bufferQ, writer)
// 调用时进行类型断言
if w, ok := bufferQ[0].(*bufio.Writer); ok {
w.WriteString(str)
w.Flush()
}
或者,如果你确定切片中存储的都是 *bufio.Writer,可以直接使用类型断言:
bufferQ[0].(*bufio.Writer).WriteString(str)
bufferQ[0].(*bufio.Writer).Flush()
更好的做法是直接使用 []*bufio.Writer 类型的切片,避免类型断言:
var bufferQ []*bufio.Writer
writer := bufio.NewWriter(file)
bufferQ = append(bufferQ, writer)
// 直接调用
bufferQ[0].WriteString(str)
bufferQ[0].Flush()


