Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/function/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将多个返回函数分配给容器(列表)_Arrays_Function_Go_Collections_Return Value - Fatal编程技术网

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

Arrays 将多个返回函数分配给容器(列表),arrays,function,go,collections,return-value,Arrays,Function,Go,Collections,Return Value,我刚到戈兰。我想将多返回值函数的返回值分配给列表(或任何容器)。考虑下面的函数: 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 & uint

我刚到戈兰。我想将多返回值函数的返回值分配给列表(或任何容器)。考虑下面的函数:

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
}
这对我来说很好。但我想知道是否有可能将此返回值直接分配给列表(或其他容器):


您可以使用接受任意数量参数的可变辅助函数。可变参数在函数中被视为一个切片(它是一个切片),因此您可以使用它/返回它

此帮助程序是您可以编写的最简单的函数之一:

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)
}
输出(在上尝试):

请注意,上述
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数据[]接口{}

输出为(在上尝试):


请参阅相关问题:

您可以使用接受任意数量参数的可变辅助函数。可变参数在函数中被视为一个切片(它是一个切片),因此您可以使用它/返回它

此帮助程序是您可以编写的最简单的函数之一:

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)
}
输出(在上尝试):

请注意,上述
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数据[]接口{}

输出为(在上尝试):


请参阅相关问题:

您希望分配给哪个列表?一个片(例如,
[]字节
)?@icza尽可能地处理所有可能的事情;列表、切片或。我想要一个能够对其进行迭代的集合/容器。假设您的函数具有以下签名:
func Split32(在uint32中)(b0字节,i32 int32,s字符串,ui64 uint64)
;您希望编译器如何处理
dst:=bytes.Split32(…)
?您希望分配给哪个列表?一个片(例如,
[]字节
)?@icza尽可能地处理所有可能的事情;列表、切片或。我想要一个能够对其进行迭代的集合/容器。假设您的函数具有以下签名:
func Split32(在uint32中)(b0字节,i32 int32,s字符串,ui64 uint64)
;您希望编译器如何处理
dst:=bytes.Split32(…)
?我称之为
pack
,但在其他方面非常整洁@kostix更名了。我把它叫做
pack
,但在其他方面非常整洁@科斯蒂克斯更名。