亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

語義方式Go 中的響應接收器函數

語義方式Go 中的響應接收器函數

Go
動漫人物 2022-10-04 15:59:33
我剛剛開始學習GO并編寫了這段代碼,用于編寫文件或文件,但我對它的語義不滿意。http.Response.Bodyos.Stdout我希望結構具有這些接收器功能,以便我可以在整個應用程序中更輕松地使用它。http.Response我知道答案可能會被標記為固執己見,但我仍然想知道,有沒有更好的方法來寫這個?是否有某種最佳實踐?package mainimport (    "fmt"    "io"    "io/ioutil"    "net/http"    "os")type httpResp http.Responsefunc 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.Getfunc 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()}謝謝!
查看完整描述

1 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

您不必實現這些功能。 已經實現了 io。作者*http.Response

以 HTTP/1.x 服務器響應格式寫入 r 到 w,包括狀態行、標頭、正文和可選的尾部。

package main


import (

    "net/http"

    "os"

)


func main() {

    r := &http.Response{}

    r.Write(os.Stdout)

}

在上面的示例中,零值打?。?/p>

HTTP/0.0 000 狀態代碼 0

內容長度: 0

游樂場: https://play.golang.org/p/2AUEAUPCA8j


如果在編寫方法中需要其他業務邏輯,則可以嵌入到定義的類型中:*http.Response

type RespWrapper struct {

    *http.Response

}


func (w *RespWrapper) toStdOut() {

    _, err := io.Copy(os.Stdout, w.Body)

    if err != nil {

        panic(err)

    }

但是,您必須使用 構造一個類型的變量:RespWrapper*http.Response


func main() {

    // resp with a fake body

    r := &http.Response{Body: io.NopCloser(strings.NewReader("foo"))}

    // or r, _ := http.Get("example.com")


    // construct the wrapper

    wrapper := &RespWrapper{Response: r}

    wrapper.toStdOut()

}

有沒有辦法使網址。獲取方法吐出自定義類型

不可以,返回類型是 ,這是函數簽名的一部分,您無法更改它。http.Get(resp *http.Response, err error)


查看完整回答
反對 回復 2022-10-04
  • 1 回答
  • 0 關注
  • 68 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號