package main
import (
"io"
"os"
)
// var (
// kernel32DLL = syscall.NewLazyDLL("kernel32.dll")
// setConsoleTextAttributeProc = kernel32DLL.NewProc("SetConsoleTextAttribute")
// )
type xx interface {
Fd() uintptr
}
// type LogBackend struct {
// Logger *log.Logger
// }
func main() {
// NewLogBackend(os.Stdout, "", 0)
test(os.Stdout)
}
func test(out io.Writer) {
if _, ok := out.(xx); ok {
println("get in ")
}
}
out是怎么实现xx接口的,运行时进入了打印
(如果修改xx接口的Fd的名称 或者返回值则没有实现)
传入的并不是单纯的writer对象,而是实现了writer对象功能的file对象。
其实这里有两个问题。
1.传入的参数需要实现Write接口(Writer的接口),才能保证编译通过
2.传入的参数需要实现Fd接口(xx对象所有的接口),才能保证ok=true
你运气好,File 对象(os.Stdout之类的)是实现了两个接口的。