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

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

將多個返回函數分配給容器(列表)

將多個返回函數分配給容器(列表)

Go
30秒到達戰場 2022-07-11 15:41:36
我在 Golang 很新鮮。我想將多個返回值函數的返回值分配給列表(或任何容器)??紤]以下函數:func Split32(in uint32) (b0, b1, b2, b3 byte) {b0 = byte(in & 0xFF)b1 = byte((in & uint32(0xFF<<8)) >> 8)b2 = byte((in & uint32(0xFF<<16)) >> 16)b3 = byte((in & uint32(0xFF<<24)) >> 24)return}我知道下面的調用符號:var a uint32 = 0xABFEAA12c0, c1, c2, c3 := bytes.Split32(a)它對我來說很好。但我想知道是否有可能將此返回值直接分配給列表(或另一個容器):var a uint32 = 0xABFEAA12l := bytes.Split32(a)
查看完整描述

1 回答

?
ITMISS

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

您可以使用接受任意數量參數的可變參數輔助函數。可變參數被視為函數內部的一個切片(它是一個切片),因此您可以使用它/返回它。


這個助手是你可以編寫的最簡單的函數之一:


func pack(data ...byte) []byte {

    return data

}

測試它:


func one() byte                 { return 1 }

func two() (byte, byte)         { return 1, 2 }

func three() (byte, byte, byte) { return 1, 2, 3 }


func main() {

    var data []byte


    data = pack(one())

    fmt.Println(data)


    data = pack(two())

    fmt.Println(data)


    data = pack(three())

    fmt.Println(data)

}

輸出(在Go Playground上試試):


[1]

[1 2]

[1 2 3]

請注意,上述pack()函數只能與返回字節的函數一起使用,僅此而已。如果您想使用它的函數也有其他返回類型,您可以將類型從更改byte為interface{}:


func pack(data ...interface{}) []interface{} {

    return data

}

使用以下功能對其進行測試:


func one() (byte, int)                 { return 1, 2 }

func two() (byte, string, interface{}) { return 1, "b", "c" }

func three() (string, byte, error)     { return "x", 2, io.EOF }

(當然使用var data []interface{})


輸出是(在Go Playground上試試):


[1 2]

[1 b c]

[x 2 EOF]


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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