代码是这样的:package mainimport ( "fmt" "io" "net/http" "log")// 获取大小的借口type Sizer interface { Size() int64}// hello world, the web serverfunc HelloServer(w http.ResponseWriter, r *http.Request) { if "POST" == r.Method { file, _, err := r.FormFile("userfile") if err != nil { http.Error(w, err.Error(), 500) return } fmt.Fprintf(w, "上传文件的大小为: %d", file.(Sizer).Size()) return } // 上传页面 w.Header().Add("Content-Type", "text/html") w.WriteHeader(200) html := `<form enctype="multipart/form-data" action="/hello" method="POST"> Send this file: <input name="userfile" type="file" /> <input type="submit" value="Send File" /></form>` io.WriteString(w, html)}func main() { http.HandleFunc("/hello", HelloServer) err := http.ListenAndServe(":12345", nil) if err != nil { log.Fatal("ListenAndServe: ", err) }}现在问题在于这一句:file.(Sizer).Size()。Sizer的interface明显是程序里定义的,没有任何实现接口的代码,但是这个语句是怎么工作的?
2 回答

胡子哥哥
TA贡献1825条经验 获得超6个赞
go的原理是这样的 首先,一个类可以有很多个方法。 当定义一个interface的时候,就会自动的把符合interface描述的方法的类,划为interface,不用自己声明。
- 2 回答
- 0 关注
- 978 浏览
添加回答
举报
0/150
提交
取消