草庐IT

golang slice [ :] matches with the last element

我正在用golang编写一个示例程序,如下所示packagemainimport("fmt")typething[2]bytefuncwalk(things[]thing,idxint)[]byte{varmatch[]bytefori,thing:=rangethings{ifi==idx{match=thing[:]}}returnmatch}funcmain(){ta:=[]thing{thing{'W','A'},thing{'O','R'}}m:=walk(ta,0)tb:=[]thing{thing{'C','A'},thing{'W','Y'},thing{'N','V'

arrays - 理解 Go 的 slice 符号

我正在经历Go-tour和this模块让我开始思考,似乎每次通过slice下限修改View时,slice的容量和长度都会减少。然而,如前所述,slice创建的底层数组不会改变。我将示例代码简化为:packagemainimport"fmt"funcmain(){s:=[]int{2,3,5,7,11,13}s=s[6:]fmt.Println(cap(s),len(s),s)}这会打印:00[]意味着这个slice现在完全没用了。然而,数组没有改变,数组仍然是(为了可视化):[2,3,5,7,11,13]并被s引用,这意味着它不会被垃圾收集。所以我的问题是,这是slice的副作用还是这

arrays - 使用 go 中的范围选择 2D slice 的 2D 子 slice

在选择slice的二维子slice时,我得到了一个令人惊讶的结果。考虑以下2Dint数组a:=[][]int{{0,1,2,3},{1,2,3,4},{2,3,4,5},{3,4,5,6},}要使用我将使用的范围选择左上角的3x32Dsliceb:=a[0:2][0:2]我希望结果是[[012][123][234]]但是第二个索引范围似乎没有任何效果,而是返回以下内容:[[0123][1234][2345]]我错过了什么?你能不能简单地不选择像这样维度>1的子slice? 最佳答案 你不能一步完成你想做的事。slice和数组不是二维

go - 如果我知道许多 tmp slice 的最大大小,我应该在创建它们时设置容量吗?

如果我需要在一个函数中使用tmpslice,并且该函数会被多次调用,它们的最大容量不会超过10。但是它们的长度是多种多样的。举例来说,可能其中80%的尺码为1。10%的尺码为3,10%的尺码为10。我可以想到如下示例函数:funcgetDataFromDb(s[]string)[]string{tmpSlice:=make([]string,0,10)for_,v:=ranges{ifcheck(v){tmpSlice=append(tmpSlice,v)}}......returnsearchDb(tmpSlice)}所以我应该做vartmpSlice[]string,tmpSlic

string - 使用字符串键和字符串或 slice 值进行映射?

新手警告。我可以用字符串键和“任何东西”作为值来制作map吗?目标是获得配置数据的映射。此数据可以是单个字符串(或bool值或整数,但将其限制为字符串也可以),也可以是字符串数组。示例:我想存储这些项目:levels=3extra-directories=["foo","bar","baz"]第一个选项始终是单个值(字符串对我来说没问题)。第二个选项是零个或多个值。目标是拥有一张map,我可以在其中存储这些值,并且在查看map时,我可以使用switchx.(type)来找出值是什么。 最佳答案 interface{}是一种接受任何类

sorting - 如何按 map 的值对 slice 进行排序

看似基本的问题,却找不到简单的答案。我有一片:[]string{"dog","cat","bird"}通过查找map中的排序值对其进行排序的最佳方法是什么:map[string]int{"dog":2,"cat":3,"bird":1}这样slice的顺序如下:[]string{"bird","dog","cat"} 最佳答案 实现sort.Interface存储数据和权重的类型的接口(interface):import"sort"typeWeightedStringSlicestruct{Strings[]stringWeight

macos - 无法在 Mac OS X 上的 Go 1.5 中 gzip 超过 32768 字节的 slice

我正在尝试使用compress/gzip在Go中压缩byteslice。每当我在笔记本电脑上压缩长度超过2^15的slice时,每个索引为2^15或更大的字节在解压缩后都会设置为0。当我在我的研究集群上运行相同的代码时,它也会中断。在我的笔记本电脑上调用goversion打印:$goversiongoversiongo1.5darwin/amd64在集群上调用goversion打印:$goversiongoversiongo1.3.3linux/amd64下面是我写的一个演示测试文件。它生成不同长度的随机slice,压缩它们,然后解压缩它们。它检查没有调用返回错误,并检查压缩和解压缩的

arrays - slice 数组 - GO

1)对于下面的slice声明,vara[][3]string创建一个指向3个字符串数组的slice(a),len(a)=3和cap(a)=3但不是cap(a)>=3a=make([][3]string,5)创建5个slice,其中每个slice(比如a[0])指向3个字符串的数组,len(a[0])=3和cap(a[0])=32)对于slice声明,varb[][3][6]string创建一个单独的slice(b),它指向3个数组,每个数组包含6个字符串,其中len(b)=3和cap(b)=3b=make([][3][6]string,5)创建5个slice,其中每个slice(比如b

go - 如何将字符串 slice 转换为 rune slice

如何将[]string类型转换为[]rune?我知道你可以这样做:[]rune(strings.Join(array,""))但是有更好的方法吗? 最佳答案 我不想为此目的使用strings.Join(array,""),因为它构建了一个我不需要的大新字符串。制作一个我不需要的大字符串不节省空间,而且根据输入和硬件,它可能不节省时间。因此,我将遍历字符串值数组并将每个字符串转换为runeslice,并使用内置的可变附加函数来增加所有rune值的slice:varallRunes[]runefor_,str:=rangearray{a

go - 结构 slice 与结构指针 slice

我不明白以下code的行为.在创建匹配结构列表作为结构指针的一部分时,代码总是打印原始数组的最后一个元素(实际上不是匹配项)——它打印12和12。但是,如果我将匹配更改为[]Widget而不是[]*Widget,那么它将打印10和11。这是为什么?packagemainimport("fmt")funcmain(){typeWidgetstruct{idintattrs[]string}widgets:=[]Widget{Widget{id:10,attrs:[]string{"blah","foo"},},Widget{id:11,attrs:[]string{"foo","bar"