将多个 return 函数分配给一个容器(列表)
assign multiple return function to a container(list)
我刚接触 Golang。我想将多个 return 值函数的 return 值分配给列表(或任何容器)。考虑以下功能:
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 = 0xABFEAA12
c0, c1, c2, c3 := bytes.Split32(a)
它对我来说工作正常。但我想知道是否有可能将此 return 值直接分配给列表(或另一个容器):
var a uint32 = 0xABFEAA12
l := bytes.Split32(a)
您可以使用接受任意数量参数的可变辅助函数。可变参数在函数内部被视为一个切片(它是一个切片),所以你可以使用它/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)
}
输出(在 Go Playground 上尝试):
[1]
[1 2]
[1 2 3]
注意上面的pack()
函数只能用于return字节的函数,仅此而已。如果你想使用它的函数也有其他 return 类型,你可以将类型从 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]
参见相关问题:
我刚接触 Golang。我想将多个 return 值函数的 return 值分配给列表(或任何容器)。考虑以下功能:
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 = 0xABFEAA12
c0, c1, c2, c3 := bytes.Split32(a)
它对我来说工作正常。但我想知道是否有可能将此 return 值直接分配给列表(或另一个容器):
var a uint32 = 0xABFEAA12
l := bytes.Split32(a)
您可以使用接受任意数量参数的可变辅助函数。可变参数在函数内部被视为一个切片(它是一个切片),所以你可以使用它/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)
}
输出(在 Go Playground 上尝试):
[1]
[1 2]
[1 2 3]
注意上面的pack()
函数只能用于return字节的函数,仅此而已。如果你想使用它的函数也有其他 return 类型,你可以将类型从 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]
参见相关问题: