我刚刚开始学习GO并编写了这段代码,用于编写文件或文件,但我对它的语义不满意。http.Response.Bodyos.Stdout
我希望结构具有这些接收器功能,以便我可以在整个应用程序中更轻松地使用它。http.Response
我知道答案可能会被标记为固执己见,但我仍然想知道,有没有更好的方法来写这个?是否有某种最佳实践?
package main
import (
"fmt"
"io"
"io/ioutil"
"net/http"
"os"
)
type httpResp http.Response
func main() {
res, err := http.Get("http://www.stackoverflow.com")
if err != nil {
fmt.Println("Error: ", err)
os.Exit(1)
}
defer res.Body.Close()
response := httpResp(*res)
response.toFile("stckovrflw.html")
response.toStdOut()
}
func (r httpResp) toFile(filename string) {
str, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
ioutil.WriteFile(filename, []byte(str), 0666)
}
func (r httpResp) toStdOut() {
_, err := io.Copy(os.Stdout, r.Body)
if err != nil {
panic(err)
}
}
顺便说一句,有没有办法让该方法吐出一个已经可以访问这些接收器函数的自定义类型,而无需强制转换?所以我可以做这样的事情:http.Get
func main() {
res, err := http.Get("http://www.stackoverflow.com")
if err != nil {
fmt.Println("Error: ", err)
os.Exit(1)
}
defer res.Body.Close()
res.toFile("stckovrflw.html")
res.toStdOut()
}
谢谢!
拉丁的传说
相关分类