猿问

将切片转换为元组的便捷功能?

在 Python 中,可以编写这样的代码,从列表中分配多个值:


(a, b, c, d) = [1,2,3,4]

是否有一组类似的用于切片的 Go 库函数?也就是说,我可以这样做:http : //play.golang.org/p/DY1Bi5omm1


package main


func 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 方法来做到这一点?


有没有办法解决界面丑陋的问题?{}


森林海
浏览 206回答 2
2回答

GCT1015

我认为你不能,至少不能以惯用/干净的方式。您可以进行多项分配,但您必须直接或使用闭包传递单个值:package mainimport (&nbsp; "fmt")func valuesFromList(list[]int,startFrom int) func() int&nbsp; {&nbsp; i:=startFrom&nbsp; return func() int {&nbsp; &nbsp; ret := list[i]&nbsp; &nbsp; i++&nbsp; &nbsp; return ret&nbsp; }}func main () {&nbsp; list := []int{0,1,2,3,4,5,6,7,8,9}&nbsp; yield := valuesFromList(list,5)&nbsp; //This works&nbsp; a,b,c := yield(),yield(),yield()&nbsp; fmt.Println(a)&nbsp; fmt.Println(b)&nbsp; fmt.Println(c)&nbsp; //This also works&nbsp; d,e,f := list[0],list[1],list[2]&nbsp; fmt.Println(d)&nbsp; fmt.Println(e)&nbsp; fmt.Println(f)&nbsp; //This won't work&nbsp; //g,h,i:= list[7:9]}
随时随地看视频慕课网APP

相关分类

Go
我要回答