代碼是這樣的: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 關注
- 997 瀏覽
添加回答
舉報
0/150
提交
取消