我有一个不寻常的任务:1.将json消息解析为Gostruct2.验证JSON中的所有字段是否在特定限制内:-字符串字段长度不再固定不变-map包含的元素不超过固定数量-如果映射键的值是嵌套结构,则验证以上2条规则为此,我使用反射,然后遍历元素,并进行类型检查:-如果是int或float-无事可做-无验证-如果是字符串-验证长度(如果失败则返回)-如果map验证map长度(如果失败则返回),然后迭代map值并递归检查它们的字段是否违反string/map规则-默认(我假设这是struct嵌套的JSON结构):将其转换为接口(interface)slice并进行递归调用。问题:在JSON
您将如何为以下函数编写测试以获得100%的覆盖率?funccountLines(files[]string)int{sum:=0for_,e:=rangefiles{f,err:=os.Open(e)iferr!=nil{fmt.Fprintf(os.Stderr,"err:%v\n",err)continue}sum+=countFileLine(f)f.Close()}returnsum} 最佳答案 极端主义方式更改方法签名以将func(string)(os.File,error)作为输入并在进行测试时注入(inject)它。沿
我正在编写用于访问Medium.com'sAPI的命令行工具使用围棋。他们发布了这个SDKforgolang也是。我一直按照说明进行操作,直到我可以使用secret状态、重定向URL和范围构建URL。packagemainimport("fmt""net/http""github.com/Medium/medium-sdk-go")funccheck(eerror){ife!=nil{panic(e)}}funcmediumAuth(){m:=medium.NewClient("clientIDString","clientSecretString")url:=m.GetAuthori
在我使用其余API向它发送请求之前,我想在我的程序中输入它时尝试检查有效的url。我在go中使用了regexp包。以下是我的正则表达式:urlRegex:="^(https?://)[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"我使用regexp.MatchString()方法将它与我的输入匹配。match,_:=regexp.MatchString(urlRegex,args[0])然而,这为我提供了一个有效的url,适用于http:////:9000或http://a.go中是否有任何我可以导入的包以进行更强大的url检查?
我正在尝试创建一个工厂方法,该方法返回一个实现某个接口(interface)的结构的构造函数。下面是一些示例代码,说明了我正在使用的模式。//GenericInterfacetypeFoointerface{Bar()string}typeFooConstructorfunc(namestring)Foo//AstructthatimplementsFootypeRealFoostruct{Namestring}func(f*RealFoo)Bar()string{returnf.Name}funcNewRealFoo(namestring)Foo{return&RealFoo{Nam
我会先在脑海中尽可能清楚地说明这一点。我有一个接口(interface)和几个类型,它们通过声明一个方法来继承它。非常好的和聪明的继承方式。然后我有一个“super”类型Thing,所有其他类型都嵌入了它。Thing结构有一个Sizeint和一个Outchan属性我想了解的是为什么我可以从两个子结构中获取大小.GetSize()的值,但我在channel字段上却没有同样的成功.GetChannel()(*ndr,我用它来在goroutine和它们的调用者之间进行通信)...这里我得到t.GetChannel未定义(类型Measurable没有字段或方法GetChannel)它可能有助于
我一直坚持使用反射库的问题。由于很多推荐,我决定使用它,但我只是在学习,有些部分并不是很容易..我有这部分代码:funccountDataByName(sourceNamestring,statDatainterface{},filtersFilter,chartNamestring)[]ChartElement{...//step1-filterfilteredData:=reflect.ValueOf(statData).MethodByName("FilterData").Call([]reflect.Value{})//step2-cluster//clusterData:=r
我正在运行MacOSXYosemite。我正在尝试从golang1.4更新到golang1.6。我卸载了golang,但我注意到我仍然可以运行go命令goversion=go1.4.2darwin/amd64。为什么会这样?IMO的指示不是很清楚。他们说删除现有的Go安装这通常是/usr/local/go(完成)删除etc/paths.d/go我通过运行goversiongo1.4.2darwin/amd64编辑了bash 最佳答案 我遇到了同样的问题。我最终得到了这个解决方案:cd/usr/local/binrmgo删除“go”命
我在Golang中编写了一个包装函数,用于从多个文件中渲染模板,如下所示:funcRenderTemplate(whttp.ResponseWriter,datainterface{},tmpl...string){cwd,_:=os.Getwd()for_,file:=rangetmpl{file=filepath.Join(cwd,"./view/"+file+".html")}t,err:=template.ParseFiles(tmpl...)iferr!=nil{http.Error(w,err.Error(),http.StatusInternalServerError)r
如果我有一些代码(如下例)从链接中获取图像,然后将其保存到磁盘,传递图像数据的最佳方式是什么?我考虑过使用ioutil.ReadAll(res.Body)将其转换为[]byte但传递它似乎很昂贵,虽然我无法分辨文档是否返回slice或数组。我还尝试返回一个指向res.Body的指针,一个*io.ReadCloser类型,但我不知道如何正确调用.Close()指向接口(interface)上的方法。我知道将保存代码移动到FetchImage函数中可能是解决此问题的最简单方法,但我希望尽可能将这些部分分开。typeImageDatastruct{Dataio.ReadCloserNames