下面的 buf 变量,在函数调用中作为形参被拷贝给 out 接口变量,此时 out 的动态类型是*bytes.Buffer,动态值为 nil, 再去执行 Write 方法会引发 panic 异常
buf
out
*bytes.Buffer
但如果 buf 改成 os.File 指针类型,由于 File 类型的Write方法内部对接收者做了判空处理,所以不会引发 panic 异常
os.File
File
Write
是出于什么原因要这么设计,如果没有仔细看源码,感觉很容易掉进坑里