2 回答

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
它們是不同的類型。但是,abufio.ReadWriter包含一個(gè)指向bufio.Reader類型和bufio.Writer類型的指針,作為其結(jié)構(gòu)的元素。因此,傳遞正確的密碼應(yīng)該很容易。試試這個(gè):
func test(sl bufio.ReadWriter){
readStuff(sl.Reader)
[...]
writeStuff(sl.Writer)
}
// Changed this bufio.Reader to a pointer receiver
func readStuff(sl *bufio.Reader) {
[...]
}

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
bufio.ReadWriter是具體類型,而不是接口。但是,它確實(shí)滿足接口(io.ReadWriter),因此可以將其分配給適當(dāng)接口類型的變量/函數(shù)自變量。然后,它將按您預(yù)期的方式工作(您的代碼實(shí)際上不使用任何接口):
package main
import (
"bufio"
"bytes"
"fmt"
"io"
"log"
)
func readStuff(r io.Reader) {
b := make([]byte, 10)
n, err := r.Read(b)
if err != nil && err != io.EOF {
log.Fatal(err)
}
fmt.Printf("readStuff: %q\n", b[:n])
}
func writeStuff(w io.Writer) {
b := []byte("written")
n, err := w.Write(b)
if n != len(b) {
log.Fatal("Short write")
}
if err != nil {
log.Fatal(err)
}
}
func test(rw io.ReadWriter) {
readStuff(rw)
writeStuff(rw)
}
func main() {
r := io.Reader(bytes.NewBufferString("source"))
var uw bytes.Buffer
w := io.Writer(&uw)
rw := bufio.NewReadWriter(bufio.NewReader(r), bufio.NewWriter(w))
test(rw)
rw.Flush()
fmt.Printf("The underlying bytes.Buffer writer contains %q\n", uw.Bytes())
}
(也在這里)
輸出:
readStuff: "source"
The underlying bytes.Buffer writer contains "written"
這種方式test可以消耗任何東西io.ReadWriter,而不僅僅是特定的東西。這暗示了您有關(guān)“哲學(xué)”問題的提示。
- 2 回答
- 0 關(guān)注
- 211 瀏覽
添加回答
舉報(bào)