草庐IT

pselect函数

全部标签

unit-testing - 我如何在测试中模拟 Go 函数?

我在StackOverflow上阅读了一些关于如何模拟time.Now()等函数的问题。解决方案似乎是编写一个实现特定接口(interface)的结构,然后在测试中传入该模拟。有更好的方法吗?由于在Golang中没有足够好的依赖注入(inject)容器实现,我不想手动传递结构,或者创建一个内部只有这样的结构:func(sMyStruct)Now(){returntime.Now()}因为,首先,我无法测试这个函数。当你处理其中没有变量的一行时,它可能什么都不是,但我有一个连接到TCP端口的函数。做这样的事情需要我为它使用的所有东西创建适配器(例如net.Dial()、time.Now(

api - 如何找出 Go 标准库函数的可能错误值?

当调用返回错误的Go函数时,我想知道如何处理非nil错误值。我可以中止、记录它或将其传递给调用者。或其组合。但如果我能找出问题所在并以更细粒度的方式使用react,那就更好了。因此,我如何才能找出可能的错误值及其含义?例如,我想使用http.NewRequest函数。查一查inthedocs.在那里,它只说有可能的错误条件,但没有说是哪些。我怎样才能找到这些? 最佳答案 首先,如果您还没有读过,我建议您阅读thisblogarticleabouterrorhandlinginGo,它可能会为您澄清一些事情。至于找出Gostdlib函

json - 我该怎么做呢?将结构作为接口(interface)发送到函数并将其作为结构取回?

我是golang开发的新手,对与thisquestion相关的事情有一些疑问.作为学习练习,我正在尝试创建一个简单的库来处理基于json的配置文件。作为用于多个应用程序的配置文件,它应该能够处理不同的参数。然后我创建了一个具有文件名和数据接口(interface)的类型结构配置。每个应用程序都会根据其配置需求有一个结构。在下面的代码中,我将所有内容(lib和“主要代码”)放在一起,“TestData结构”是“应用程序参数”。如果它不存在,它将设置默认值并创建文件,并且它正在工作。但是当我尝试读取文件时。我尝试解码json并将其放回数据接口(interface)。但它给了我一个错误,我不

go - "new style"google pubsub golang 函数无法正常工作

我正在尝试使用Gopubsublibrary针对localemulatedpubsubserver.我发现“旧式”(已弃用)函数(例如CreateSub和PullWait)工作正常,但“新式”API(例如Iterators和SubscriptionHandles)没有按预期工作。我编写了两个不同的单元测试,它们都测试相同的操作序列,一个使用“新式”API,一个使用“旧式”API。顺序是:创建订阅无法提取任何消息(因为没有可用消息)发布消息提取该消息,但不确认它最后再次拉取它应该需要10秒,因为消息ACK超时必须先过期https://gist.github.com/ianrose14/d

go - "Block"型模板函数

使用http/template是否可以定义一个像内置的define或range一样工作的“block”类型的函数?例如,我想制作一个功能如下:{{doThing}}Largeamountoftexthere...{{end}}我知道我可以使用{{doThing"Largeamountoftexthere..."}},但这不是我想要的。 最佳答案 不可能编写像内置定义或范围操作那样工作的block类型函数。 关于go-"Block"型模板函数,我们在StackOverflow上找到一个类似

go - 如何使用 PredefinedAcl 函数将 ACL 设置为 publicRead?

ifres,err:=service.Objects.Insert(*bucketName,object).Media(file).Do();err==nil{fmt.Printf("Createdobject%vatlocation%v\n\n",res.Name,res.SelfLink)}else{fatalf(service,"Objects.Insertfailed:%v",err)}我想修改此代码以将ACL设置为publicRead,我注意到APIfunc(*ObjectsInsertCall)PredefinedAcl中有一个函数,但我找不到如何使用它。

go - 将单独的值传递给模板函数

我正在尝试找到一种将值传递给go模板函数的方法。我的意思是。我在结构方法中定义了模板函数列表:func(o*MyObj)run()error{funcMap:=template.FuncMap{"func1":func1,"func2":func2,}}Function1签名是funcfunc1(myvalstring)string{...},但对于Function2id需要访问MyObj结构字段之一。意思是:funcfunc2(myvalstring)string{//MyObj.fieldwouldneedtobeusedhere..Howcanidoit?}

go - 将结构数组传递给 Go 中的函数

我有一个从一些XML文件中解析出来的对象。它有这样的结构类型typeReportstruct{Items[]Item`xml:......`AnotherItems[]AnotherItem`xml:......`}typeItemstruct{Namestring}typeAnotherItemstruct{Namestring}func(Item*Item)Foo()bool{//somecodehere}func(AnotherItem*AnotherItem)Foo()bool{//anothercodehere}对于每个项目我都必须这样做:funcmain(){//somef

go - 调用 log.Fatalln 时是否调用延迟函数?

db,err:=sql.Open("postgres","…")iferr!=nil{log.Fatalln(err)}deferdb.Close()tpl,err:=template.ParseGlob("")iferr!=nil{log.Fatalln(err)}如果template.ParseGlob("")返回错误,db.Close()是否仍在调用? 最佳答案 不,延迟函数没有运行。这是对log.Fatal的描述:FatalisequivalenttoPrint()followedbyacalltoos.Exit(1).lo

使用 for 循环和匿名函数进行并发时出现意外行为

我已经找到了一种让代码按照我想要的方式运行的方法,但我想了解为什么它会这样运行,以便我对Go并发的理解有所提高。我正在测试sync.WaitGroup以等待一些goroutine完成,因为我计划以这种方式向AmazonS3进行多次上传。这是我最初的代码:funcmain(){varwgsync.WaitGroupfori:=1;i我惊讶地看到输出是:6,6,6,6,6。而不是像这样的:2,4,1,5,3。由于循环甚至没有转到6,这对我来说毫无意义。我后来将i变量作为参数传递给匿名函数然后它的行为符合我的预期。为什么会这样?我不明白。 最佳答案