草庐IT

test_slice

全部标签

go - 如何同步用于并发初始化 slice 的 go 例程?

我正在尝试使用go例程以并发方式初始化一组项目。然而,Go奇怪的内存行为阻止我这样做,即使我使用了建议的原语(channel)。下面是最小的复制:funcTestSliceInit(t*testing.T){toInit:=make([]int,10)syncLock:=make(chanbool)fori:=rangetoInit{gofunc(){toInit[i]=i;syncLock代码应该将toInit数组初始化为0-9,但它没有。相反,会产生错误。我在Goland2018.1上试过这段代码 最佳答案 因为代码是并发运行的

json - 我如何在 slice 内对 slice 进行 json 解码

我正在尝试解码一些非常丑陋的json,但不知道如何解码。我有:packagemainimport"fmt"import"encoding/json"typePublicKeystruct{IDint`json:"id"`Keystring`json:"key"`MyData[]struct{IDstring`json:"id"`Valueint`json:"value"`}}funcmain(){b:=`[{"id":1,"key":"my_key"},[{"id":"some_id","value":12},{"id":"anorther_id","value":13}]]`varp

pointers - 混淆函数参数中的指针、 slice 和接口(interface){}

我一直在阅读有关Go如何通过指针与值将参数传递给函数的信息。我一直在阅读有关接口(interface)类型的信息。而且我一直在篡改反射包。但显然,由于这里的示例代码,我仍然不明白它是如何工作的:packagemainimport("reflect""fmt")typeBusinessstruct{Namestring}funcDoSomething(b[]Business){variinterface{}i=&bv:=reflect.ValueOf(i).Elem()forc:=0;c当我运行这段代码时,它将打印一个包含10个业务结构的列表,其Business.Name为Pizza0到

unit-testing - 如何编写需要大量测试用例的 go 测试

假设我有一个包含大约210000个英文单词的列表。我需要使用所有这210000个单词作为测试用例。我需要确保每次运行测试时都涵盖该列表中的每个词。问题是:在我的测试中存储这些词的最佳做法是什么?我应该将所有这些单词保存在一个slice中(slice会不会太大?),还是应该将这些单词保存在一个外部文件中(如words.txt)并在需要时逐行加载文件? 最佳答案 测试数据通常存储在名为testdata的目录中,以将其与其他源代码或数据文件分开(请参阅命令gohelptest中的文档).go工具会忽略该目录中的内容。无论如何,210,00

mysql - go-gorm mysql "unsupported type []string, a slice of string"

我使用gorm,并尝试创建到mysql的事务。我有一个结构typeGamestruct{Images[]string}game:=Game{Images:[]string{"1.png","2.png"}}db:=Database()tx:=db.Begin()iferr:=tx.Create(&game).Error;err!=nil{tx.Rollback()returnerrors.New("Cannotaddgame")}tx.Commit()但是我收到错误(sql:convertingargument$1type:unsupportedtype[]string,asliceo

go - 删除 slice 中的元素并返回删除的元素和剩余的元素

我只想要一个函数,它具有结构类型“t”的一部分,返回返回我正在寻找的元素和剩余的元素,我尝试使用部分解决方案来解决我的问题,如下所示:Deleteelementinaslice但是由于一个奇怪的原因,它没有按预期工作https://play.golang.org/p/tvJwkF5c_tjfuncmain(){varnames=[]string{"john","julio","pepito","carlos"}fmt.Println(getMe("john",names))}funcgetMe(mestring,names[]string)(string,[]string,bool){

unit-testing - 如何测试以文件夹为输入的 HTTP 函数?

我有一个HTTP处理函数(POST),它允许用户从Web浏览器应用程序上传文件夹。该文件夹作为文件夹中的文件数组从JavaScript代码传递,并在后端(GoAPI)上被接受为[]*multipart.FileHeader。我正在努力为此功能编写Go单元测试。如何将文件夹作为测试函数的输入传递?我需要帮助以正确的格式创建httpRequest。我已尝试为FileHeader数组使用/设置值,但不允许导入某些属性。因此,必须有一种我不知道的测试此处理程序的不同方法。文件夹上传的处理函数:funcFolderUpload(whttp.ResponseWriter,r*http.Reques

unit-testing - 戈朗 : how to generate a net/http timeout Error to perform unit test

我得到了一段如下代码:iftimeoutErr,ok:=err.(net.Error);ok&&timeoutErr.Timeout(){//Somecodethatneedtotest}我怎样才能生成可以匹配此处条件的错误,以便代码通过if。 最佳答案 Error是一个接口(interface):typeErrorinterface{errorTimeout()bool//Istheerroratimeout?Temporary()bool//Istheerrortemporary?}要实现它,您需要执行以下操作(未经测试):ty

go - 获取 slice 的头部或除头部以外的所有内容

如何在Go模板中获取slice的头部或尾部?我想使用什么:{{template"breadcrumb"$urlArray[0]$urlArray[1:]}} 最佳答案 可以通过index获取slice元素:{{$length:=len$urlArray}}first-{{index$urlArray0}}但最后一个更难,因为你必须获得索引$length-1,并且模板中不允许算术运算。但是你可以将go函数暴露给模板:funcfirst(s[]string)string{iflen(s)==0{return""}returns[0]}f

unit-testing - 如何在go中测试数据库错误?

我在go中实现了一个由leveldb(https://github.com/syndtr/goleveldb)支持的存储器。我是新来的,我想弄清楚我如何获得下面代码中perr!=nil条件的测试覆盖率。我可以测试自己的错误,但我不知道如何可靠地让leveldb的Put方法返回错误。模拟一个数据库只是为了获得一些边缘案例的测试覆盖率,这似乎是一项没有多少返回的大量工作。mockleveldb是我唯一真正的选择吗?如果是的话,推荐的go模拟框架是什么?如果还有另一种方式,它是什么?iferr==leveldb.ErrNotFound{store.Lock()perr:=store.ldb.