草庐IT

slice_size

全部标签

go - 比较 slice 或字节更好?

我只是想知道这些方法中哪种更好(或者我是否缺少更好的方法)。我正在尝试确定单词的第一个字母和最后一个字母是否相同,对我来说有两个明显的解决方案。ifword[:1]==word[len(word)-1:]或ifword[0]==word[len(word)-1]据我了解,第一个只是提取字符串的slice并进行字符串比较,而第二个是从两端提取字符并作为字节进行比较。我很好奇两者之间是否存在性能差异,是否有任何“更可取”的方式来做到这一点? 最佳答案 在Go中,string是UTF-8编码的。UTF-8是一种变长编码。packagema

go - 为什么在Golang中创建 slice 时会有一个CAPACITY参数

这是一个非常简单的问题:如果在Golang中一个slice的capacity是可以超过的,那为什么还要有capacity这个参数呢?我认为这与内存管理有关,某种“知道在内存中分配slice的位置”,但我不太清楚。 最佳答案 IfthecapacityofasliceinGolangcanbeexceeded,whyisthereacapacityparameterinthefirstplace?不知道你说的是什么意思,但是不能超过容量。slice可以被索引到它的长度(不包括),它不能超过容量,并且它们可以被重新slice到它的容量(

sql - 如何避免 slice 引用同一个内存块

我在从数据库查询并尝试插入slice时遇到问题(包含一些映射[字符串]接口(interface){})即使我已经使用make创建了一个新的内存块,slice似乎总是映射到同一个内存块。typeDBResult[]map[string]interface{}funcResultRows(rows*sql.Rows,limitint)(DBResult,error){cols,err:=rows.Columns()iferr!=nil{returnnil,err}vals:=make([]sql.RawBytes,len(cols))scanArgs:=make([]interface{}

go - 在 C 共享库中公开一个带有 2D slice 作为参数的函数(通过 JNA 和 C 在 Java 中使用)

我正在尝试使用go编写一个简单的矩阵运算API,并将API公开为共享库。这个共享库将从Java(使用JNA)和C中使用。关于使用除简单int或string之外的任何数据类型作为函数参数的文档非常少。我的要求是将具有1个或多个2Dslice的函数作为参数和返回类型公开。我无法弄清楚是否支持这样的事情。这可能吗?有这方面的例子吗? 最佳答案 我认为关键点是查看gobuild工具生成的slice、string和int的c绑定(bind)。2Dslice没试过,不过应该和1Dslice有unsafepointerconverter没什么区别

go - 将类型 T 的 slice 转换为 Go 中的字节 slice 的快速方法

我有不同类型的slice,我需要用TCP发送它们。我的slice长度很大,而且不是一个常数值。有什么方法可以将slice转换为[]byte而无需循环各个元素?例如,我想要这样的东西(假设这里的mySlice元素是4字节):byteSlice:=(*[4*len(mySlice)]byte)(unsafe.Pointer(&mySlice[0]))但它不会工作,因为4*len(mySlice)不是常量。谢谢。 最佳答案 这就是我最终所做的(将其发布为我的问题的答案):import"unsafe"import"reflect"mySli

go - 奇怪的 slice 行为

我正在尝试实现BFS算法以查找图中的所有路径(来自src和dest)。我正在使用一个slice来模拟一个队列,但是当我在for循环中向它追加多个元素时,该slice会损坏(追加没有按预期工作)。我不知道为什么。我是GoLand的新手//GetPathsFromCacheretrieveinformationfromloadedjsonsinthecachefunc(cache*ModelsDataCache)GetPathsFromCache(modelUrn,selectedElement,targetType,authTokenstring,modelJSONs*ModelJSON

go - 将字符串 slice 尝试索引方法抽象为所有 slice 类型

我有这个函数用于字符串slice:functryIndex(arr[]string,indexint,defstring)string{ifindex我想将其抽象为一般slice的类型方法。func(i[]interface)TryIndex(indexint,definterface)interface{if(index但是这给了我两个错误:prog.go:9:syntaxerror:unexpected),expecting{prog.go:13:non-declarationstatementoutsidefunctionbody其中第9行是基金申报行,第13行是“返还违约”行。

go - 是否有一种有效的方式来回收过剩容量的 slice ?

我有大量已分配的slice(几百万),我已将其附加。我敢肯定,他们中的很多人都重载了。我想尝试减少内存使用量。我的第一个尝试是遍历所有这些,分配一个新的len(oldSlice)slice并将值复制过来。不幸的是,这似乎会增加内存使用量(最多增加一倍)并且垃圾收集回收内存的速度很慢。是否有一种好的通用方法可以减少大量超容量slice的内存使用量? 最佳答案 在不知道确切问题的情况下,很难选择正确的策略来分配缓冲区。通常你可以尝试重用你的缓冲区:typebufferstruct{}varbuffers=make(chan*buffer

go - 将 slice append 到 slice 的 slice

我有数据结构:typePosList[]inttypeInvertedIndexstruct{CapacityintLenintIndexList[]PosList}我对Add方法有疑问:func(ii*InvertedIndex)Add(posListPosList,docIdint){ifii.Len==ii.Capacity{newIndexList:=make([]PosList,ii.Len,(ii.Capacity+1)*2)fori:=0;i或者,我尝试这样的事情:func(ii*InvertedIndex)Add(posListPosList,docIdint){ifi

struct - 指向结构 slice 的预期指针

我正在使用golang开发服务器。我有一个auth-helper,它使用安全token对用户进行身份验证(它是一个测试)。当我在AuthUsingCredentials函数中查询(我正在使用dep)时出现错误,它输出以下错误:"Expectedpointertostructslice*[]struct"如果我将varresult*entities.User更改为varresult[]entities.User然后打印result[0]它会工作,但随后会输出:"cannotuseresult[0](typeentities.User)astype*entities.Userinargum