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
		}
	}
}

Go Playground - The Go Programming Language

你需要将 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()
回到顶部