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
,但在其他方面非常整洁@科斯蒂克斯更名。