【发布时间】:2021-07-12 12:22:20
【问题描述】:
简单的问题。 我不明白一件事。
package main
import (
"encoding/csv"
"fmt"
"log"
"os"
"reflect"
)
func main() {
records := [][]string{
{"first_name", "last_name", "username"},
{"Rob", "Pike", "rob"},
{"Ken", "Thompson", "ken"},
{"Robert", "Griesemer", "gri"},
}
file, _ := os.Create("file.csv")
fmt.Println(reflect.TypeOf(file))
fmt.Println(reflect.TypeOf(os.Stdout))
w := csv.NewWriter(file)
for _, record := range records {
if err := w.Write(record); err != nil {
log.Fatalln("error writing record to csv:", err)
}
}
// Write any buffered data to the underlying writer (standard output).
w.Flush()
if err := w.Error(); err != nil {
log.Fatal(err)
}
}
Line : w := csv.NewWriter(file) 我检查了方法 -> NewWriter 应该得到 io.Writer 类型的参数。第 21 和 22 行告诉我“file”和“os.Stdout”(也可以放入 NewWriter)具有以下类型:
*os.文件
*os.文件
那么怎么可能一切都正常工作呢?在 Go 中变量有不止一种类型是可能的吗?
【问题讨论】:
-
io.Writer 是一个接口。阅读the Tour of Go 和the Language Specification 中的接口。