一段Go代码看不懂求解!

代码是这样的:
packagemain
import(
"fmt"
"io"
"net/http"
"log"
)
//获取大小的借口
typeSizerinterface{
Size()int64
}
//helloworld,thewebserver
funcHelloServer(whttp.ResponseWriter,r*http.Request){
if"POST"==r.Method{
file,_,err:=r.FormFile("userfile")
iferr!=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:=`
Sendthisfile:
`
io.WriteString(w,html)
}
funcmain(){
http.HandleFunc("/hello",HelloServer)
err:=http.ListenAndServe(":12345",nil)
iferr!=nil{
log.Fatal("ListenAndServe:",err)
}
}
现在问题在于这一句:file.(Sizer).Size()。
Sizer的interface明显是程序里定义的,没有任何实现接口的代码,但是这个语句是怎么工作的?
潇潇雨雨
浏览 407回答 2
2回答

慕桂英546537

go的原理是这样的首先,一个类可以有很多个方法。当定义一个interface的时候,就会自动的把符合interface描述的方法的类,划为interface,不用自己声明。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript