为了账号安全,请及时绑定邮箱和手机立即绑定

将多个返回函数分配给容器(列表)

将多个返回函数分配给容器(列表)

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 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信