在 Python 中,可以编写这样的代码,从列表中分配多个值:(a, b, c, d) = [1,2,3,4]是否有一组类似的用于切片的 Go 库函数?也就是说,我可以这样做:http : //play.golang.org/p/DY1Bi5omm1package mainfunc get3(s []interface{}) ( a interface{}, b interface{}, c interface{}, rest []interface{}) { return s[0],s[1],s[2],s[4:]}func main() { s := make([]interface{},5); for i :=0 ; i < 5; i++ { s[i] = i} a,b,c,_ := get3(s) print(a.(int)) print(b.(int)) print(c.(int))}有没有标准的 gophery 方法来做到这一点?有没有办法解决界面丑陋的问题?{}
2 回答
GCT1015
TA贡献1827条经验 获得超4个赞
我认为你不能,至少不能以惯用/干净的方式。您可以进行多项分配,但您必须直接或使用闭包传递单个值:
package main
import (
"fmt"
)
func valuesFromList(list[]int,startFrom int) func() int {
i:=startFrom
return func() int {
ret := list[i]
i++
return ret
}
}
func main () {
list := []int{0,1,2,3,4,5,6,7,8,9}
yield := valuesFromList(list,5)
//This works
a,b,c := yield(),yield(),yield()
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
//This also works
d,e,f := list[0],list[1],list[2]
fmt.Println(d)
fmt.Println(e)
fmt.Println(f)
//This won't work
//g,h,i:= list[7:9]
}
- 2 回答
- 0 关注
- 205 浏览
添加回答
举报
0/150
提交
取消