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

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

Golang 將 nil 作為可選參數傳遞給函數?

Golang 將 nil 作為可選參數傳遞給函數?

Go
LEATH 2021-11-08 15:42:44
在 Golang 中,http.NewRequest有這樣的規范:func NewRequest(method, urlStr string, body io.Reader) (*Request, error)但是,如果我不想將 傳遞給對象,我可以將其nil作為body選項傳遞,如下所示:bodyio.Readerreq, err := http.NewRequest("GET", "http://www.blahblah.org", nil)我如何在我的代碼中實現這個功能?我有一個函數,我想傳遞一個可選的字符串值,以便它可以翻閱 API 結果,但是如果我將 a 傳遞nil給字符串輸入,我會得到這個:./snippets.go:32: 無法將 nil 轉換為字符串類型我的函數的參數如下所示:func getChallenges(after string) ([]challenge, string, error)
查看完整描述

3 回答

?
HUH函數

TA貢獻1836條經驗 獲得超4個贊

Go 沒有“可選”參數作為其他語言中普遍理解的概念;nil只是接口的零值(io.Reader在這種情況下)。

字符串的等效零值是一個空字符串:

getChallenges("")

如果要接受 0 個或多個相同的參數類型,請使用可變參數語法:

func getChallenges(after ...string) ([]challenge, string, error)


查看完整回答
反對 回復 2021-11-08
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

您可以修改函數以接收指針值,如下所示:


func getChallenges(after *string) ([]challenge, string, error)


然后您可以將其nil作為參數傳遞給它。但是不要忘了檢查after的nil取消引用它之前你的函數的內在價值,或者你會得到一個零指針異常:


func getChallenges(after *string) ([]challenge, string, error) {

    if after == nil {

        // No value specified

    } else {

        fmt.Printf("After: %s\n", *after) // Note pointer dereferencing with "*"

    }

    // ...

}

另外一個選項:


只需使用兩個函數:


func getChallenges(after string) {}


func getAllChallenges() {

    return getChallenges(/* some default value here */)

}


查看完整回答
反對 回復 2021-11-08
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

您可以使用橢圓運算符來發送可選參數.. 不要在可選參數中傳遞任何內容并檢查參數的長度。它應該可以解決您的問題


func foo(params ...int) {

   fmt.Println(len(params))

}


func main() {

    foo()

    foo(1)

    foo(1,2,3)

}


查看完整回答
反對 回復 2021-11-08
  • 3 回答
  • 0 關注
  • 290 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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