草庐IT

slice_size

全部标签

go - slice

问题描述:我有一个slicebar。如果bar中至少有2个元素,我想用bar的前两个元素创建另一个slicefoo。或者如果bar至少有一个元素,则使用bar的第一个元素。我的想法://bar:=[]int{1,2,3...foo:=bar[:(int)(math.Min(float64(len(bar)),2))]编辑:这是我尝试过的另一种方式,x:=2iflen(bar)是否可以改进代码?至少,为了实现如此简单的事情而进行两次转换对我来说并不好看。 最佳答案 如果slice的长度大于2,您可以重新slice。如果不是,无需重新s

Golang 在遍历 slice panic 时删除元素

我想从slice中删除一些元素,并且https://github.com/golang/go/wiki/SliceTricks建议这种slice操作:a=append(a[:i],a[i+1:]...)然后我在下面编码:packagemainimport("fmt")funcmain(){slice:=[]int{1,2,3,4,5,6,7,8,9}fori,value:=rangeslice{ifvalue%3==0{//remove3,6,9slice=append(slice[:i],slice[i+1:]...)}}fmt.Printf("%v\n",slice)}使用goru

go - 意外的 slice 追加行为

我今天在go代码中遇到了奇怪的行为:当我附加elements时至slice在循环中,然后尝试创建新的slices根据循环的结果,最后append覆盖slices从以前appends.在此特定示例中,它表示sliceFromLoopj,g和hslice的最后一个元素不是100,101和102分别,但是...总是102!第二个例子-sliceFromLiteral表现符合预期。packagemainimport"fmt"funccreate(iterationsint)[]int{a:=make([]int,0)fori:=0;iplay.golang链接:https://play.gol

io - 有没有办法将 []byte slice 转换为 io.Reader?

这个问题在这里已经有了答案:Convertbyteslicetoio.Reader(1个回答)关闭1年前。我刚开始使用go,想知道是否可以将[]byteslice转换为io.Reader。如ioutil.ReadAll中所示,其他方式是可能的。如果不能,是否可以将code.google.com/p/go.net/html.Tokenizer以某种方式与字节slice一起使用?

concurrency - 并发 slice 访问

我正在使用Go进行一些流处理,但在尝试弄清楚如何在没有锁的情况下以“Go方式”执行此操作时遇到了困难。这个人为的例子展示了我面临的问题。我们一次得到一个东西。有一个goroutine将它们缓冲到一个名为things的slice中。当things变满时len(things)==100然后以某种方式处理并重置有n个并发goroutine需要访问things才满从其他goroutines访问“不完整的”things是不可预测的。doSomethingWithPartial和doSomethingWithComplete都不需要改变things代码:varmsync.Mutexvarcount

go - 反射(reflect) slice 底层类型

我有以下代码:v:=&[]interface{}{client,&client.Id}valType:=reflect.TypeOf(v)val:=reflect.ValueOf(v)ifval.Kind()==reflect.Ptr{elm:=val.Elem()ifelm.Kind()==reflect.Slice{fmt.Println("Type->>",elm,"-",valType.Elem())}}输出如下:Type->>-[]interface{}我怎样才能得到它的底层类型?我想检查数组类型是否属于interface{}类型。编辑实现它的一种方法,恕我直言,这是一种丑陋

go - slice 后的括号?

我最近开始学习围棋,并遵循了tutorial.在教程中有一行:p1:=&Page{Title:"TestPage",Body:[]byte("ThisisasamplePage.")}他们有一个带括号定义的slice:[]byte("ThisisasamplePage.")然而,从我读过的所有文档中,我从未见过slice后有括号。我只看到格式:b:=[]byte{'g','o','l','a','n','g'}使用大括号。括号的作用是什么? 最佳答案 来自规范;Convertingavalueofastringtypetoaslic

go - 在 go 中将 slice 项目从一个位置移动到另一个位置

我试图将一个项目从一个位置移动到另一个位置。GoPlaygroundindexToRemove:=1indexWhereToInsert:=4slice:=[]int{0,1,2,3,4,5,6,7,8,9}slice=append(slice[:indexToRemove],slice[indexToRemove+1:]...)fmt.Println("slice:",slice)newSlice:=append(slice[:indexWhereToInsert],1)fmt.Println("newSlice:",newSlice)slice=append(newSlice,sl

arrays - 将 os.Stdin 中的数字读取到 Go 中的数组或 slice 中

我可以像下面这样使用多个变量读取多个数字。numbers:=make([]int,2)fmt.Fscan(os.Stdin,&numbers[0],&numbers[1])我可以使用数字本身而不是单独的形状来使其更简单吗?numbers:=make([]int,2)fmt.Fscan(os.Stdin,&numbers)//justanexample,goterror 最佳答案 fmt包不处理扫描slice,但您可以创建一个实用函数来打包所有元素的地址:funcpackAddrs(n[]int)[]interface{}{p:=ma

c - 如何在go中将指向 slice 的指针传递给C函数

背景:使用cgo从Golang中调用C函数。我想使用具有此签名的C函数:intf(int*count,char***strs)。它会修改count和strs的数据,这就是它使用指针指向它们的原因。count的值为strs的长度;strs是一个字符串数组;返回值只是一个(bool值)指示器,指示是否存在错误。在golang中,我可以通过使用C.f((*C.int)(&count))成功传递和修改count;使用[]*C.char传递[]string。示例代码如下:/*#includeintf(int*c,char**str){inti;printf("%d\n",*c);for(i=0;