草庐IT

slice_size

全部标签

go - 如何查找两个 slice 是否引用同一内存?

考虑这个例子:sliceA:=make([]byte,10)sliceB:=make([]byte,10)//sliceAandsliceBarereferencingdifferentmemory,//witcheventuallymaycontainsamedatasliceC:=sliceA[:]//sclieCreferencessamememoryassliceAsliceD:=sliceA[1:2];sliceE:=sliceA[4:5]//assertthatsliceDandsliceEsharesameblockofmemory有什么方法可以检查2个slice是否引用

go - 为什么 append() 修改提供的 slice ? (见例子)

您可以runtheexamplecode在GoPlayground上。代码如下:packagemainimport"fmt"funcmain(){numbers:=[]int{1,2,3,4,5}fmt.Println(numbers)_=append(numbers[0:1],numbers[2:]...)fmt.Println(numbers)}输出:[12345][13455]为什么numbersslice被append修改了?这是预期的行为吗?如果是,您能向我解释一下原因吗?我认为append不会修改它的参数。 最佳答案 参

google-app-engine - slice 上无效的内存地址或零指针取消引用

为什么greets在运行时给我invalidmemoryaddressornilpointerdereference?typeResponsestruct{Messagestring`json:"message"`}typeResponseListstruct{Items[]*Response`json:"items"`}func(gs*GreetingService)List(r*http.Request,req*Request,resp*ResponseList)error{greets:=make([]*Response,2,2)greets[0].Message="hello"

go - slice 和列表之间有区别吗?

slice和list在go上有区别吗我的理解是有数组(固定大小)和slice(动态大小),但这两者之间有区别吗:varslice[]intlist:=[]string{"a","b","c","d","e"}我想说它们都是slice,但我说得对吗? 最佳答案 varslice[]intlist:=[]string{"a","b","c","d","e"}这两个都是slice。只有在声明中提到大小时才是数组。此大小以后无法更改,因此它是固定大小。vararray[5]intarray2:=[3]string{"a","b","c"}G

go - 如何删除 slice 中的重复元素?

我编写了一个代码来生成随机数并删除重复的数字,如下所示:packagemainimport("fmt""math/rand""time")funcmain(){list:=[7]int{}fori:=0;i我注意到有很多重复的代码,例如:s!=list[0]&&list[1]但是当我把它写到:s!=list[0:6]这是错误的,我该如何正确执行此操作? 最佳答案 将其存储在map中。那样rndmap:=make(map[int]bool)forlen(rndmap)Resultmap永远不会存储重复的索引。你可以像这样把它转换成sl

go - 如何使用指针修改 slice

为什么没有在下面的代码中修改slice:packagepointersimport"fmt"funcmodifyObject(v*Vertex){v.x=v.x*v.xv.y=v.y*v.y}funcmodifyArray(vertices*[]Vertex){for_,v:=range*vertices{v.x=v.x*v.xv.y=v.y*v.y}}funcDemoPointersArray(){v:=Vertex{2,3}modifyObject(&v)fmt.Println("Vertexmodifiedsuccessfully:",v)v1:=Vertex{2,3}v2:=V

go - 使用 [][]int slice 超出范围但适用于 map[int][]int

为什么这段代码有效graph:=make(map[int][]int,0)graph[0]=append(graph[0],1)但是如果你用graph:=make([][]int,0)替换第一行,我会得到panic:runtimeerror:indexoutofrange?这很奇怪。 最佳答案 让我们简化您的代码,使发生的事情更加明显(Playgroundlink):graph1:=make(map[int]int,0)graph2:=make([]int,0)x:=graph1[0]//Successy:=graph2[0]//P

dictionary - 为什么 slice 值有时会过时但永远不会映射值?

我发现slice映射函数和channel经常作为引用类型一起提到。但是我注意到slice的东西没有表现出引用行为,就像它们可能会过时一样:vars[]int//mustupdateslicevalues=append(s,...)或//mustusepointerifwewanttoexposethechangefuncfoo(s*[]int)error//orchangethefunctionsignaturetoreturnitlike_append_funcfoo(s[]int)(rslice,errerror)通常我通过牢记slice描述符实现的内部组件来理解这一点:slice

go - 在golang中连接2个 slice

我有2片,s1:=[]int{1,2,3,4,5}s2:=[]int{3,4,5,6,7}我要结果s3=[]int{1,2,3,4,5,3,4,5,6,7}我正在做类似的事情:for_,x:=ranges1{s2=append(s2,x)}这看起来是一个非常微不足道的问题,但请相信我,我没有找到解决这个问题的单行解决方案。我们该怎么做? 最佳答案 这是内置的append()函数用于:将值(可能是slice的值)附加到另一个的末尾。结果是串联。如果你想要s3“独立于”s1和s2,然后追加s1为空或nilslice,然后追加s2结果:s

c - 为什么 Go 似乎无法识别 C 头文件中的 size_t?

我正在尝试编写一个将充当C库前端的go库。如果我的一个C结构包含size_t,我得到编译错误。据我所知size_t是内置的C类型,为什么不去识别它呢?我的头文件看起来像:typedefstructmystruct{char*buffer;size_tbuffer_size;size_t*length;}mystruct;我得到的错误是:gccfailed:Infileincludedfrom:5:mydll.h:4:error:expectedspecifier-qualifier-listbefore'size_t'oninput:typedefstruct{char*p;intn;