HandleFunc传入的第二个参数是一个函数,Handle传入的是一个实现了Handler接口的结构体。内部实现的时候,这个传入的参数当然会被统一成一个接口,但是函数不是接口,所以需要做内部的转型,给函数绑定一个方法,然后调用函数自己(这个算是go比较巧妙的用法)。其实HandleFunc内部的实现很简单,最后也是调用Handle。
空指针异常,你要看报错的堆栈信息。
源码:https://github.com/willierGo/simpleVlog/blob/master/src/vlog/main.go
接口获取到的文件其实放在了内存中,代码中的io.Copy是指把内存中的文件流式写入到硬盘文件中。这个过程只是写入。你所说的直接将file存到硬盘,也是同样的方法。