草庐IT

go - 如何在Golang中通过引用传递具有值类型接口(interface)的 map slice

我要通过[]map[string]interface{}通过引用一个函数。这是我的尝试。packagemainimport"fmt"funcmain(){b:=map[string]int{"foo":1,"bar":2}a:=[...]map[string]int{b}fmt.Println(a)editit(a)fmt.Println(a)}funceditit(ainterface{}){fmt.Println(a)b:=map[string]int{"foo":3,"bar":4}a=[...]map[string]int{b}fmt.Println(a)}https://pl

go - 在 golang 中通过 TCP 套接字发送数百万条短消息

我正在用golang编写两个服务,它们需要每秒相互发送大约200万条消息。每条消息大约50字节,因此吞吐量应该只有大约100MB/s。我想为此使用tcp。但是,结果非常缓慢。我配置了SetNoDelay(false)以确保数据在发送之前被缓冲,但这没有任何区别。我每秒只能发送大约50k条消息,消息大小无关紧要,所以我假设代码在某处阻塞。这是我的测试代码:packagemainimport"net"import"fmt"import"bufio"import(//"strings""time")funcstartserver(){fmt.Println("Launchingserver.

api - 在 Go 中通过 HTTP 接收二进制数据

在go中通过HTTP接收二进制数据的最佳方式是什么?就我而言,我想将一个zip文件发送到我的应用程序的RESTAPI。特定于goweb的示例会很棒,但net/http也很好。 最佳答案 从请求正文中读取即可有点像packagemainimport("fmt";"net/http";"io/ioutil";"log")funch(whttp.ResponseWriter,req*http.Request){buf,err:=ioutil.ReadAll(req.Body)iferr!=nil{log.Fatal("request",e

ssh - 如何在 Go 中通过隧道路由 http Get?

我有一个到我的服务器的ssh隧道(通过端口:9998)。我希望在Go中通过此端口路由我的httpGET/POST请求。在java中,我会指定DsocksProxyHost和DsocksProxyPort。我正在寻找Go中的类似选项。提前感谢您的帮助。 最佳答案 使用上述评论中提供的信息,这里是一个关于如何通过SOCKS代理传输HTTP请求的工作示例:packagemainimport("fmt""io/ioutil""net""net/http""time""golang.org/x/net/proxy")funcmain(){ur

mongodb - 在 mongodb-go-driver 中通过子字符串正则表达式查询查找条目

我无法让官方gomongo驱动程序成功返回通过正则表达式查询查询的对象。我已经知道如何通过mongoshell执行此操作并获得预期结果。在这个例子中,我得到了所有在“文本”字段中包含“他”的条目:db.getCollection('test').find({"text":/he/})与此相同:db.getCollection('test').find({"text":{$regex:/he/,$options:''}})这是我当前无法运行的代码:packagemainimport("context""fmt""time""go.mongodb.org/mongo-driver/bson

pointers - Go中通过反射修改struct中的空指针字段

我试图通过反射循环修改空指针字段“MyField”的间接值。我感到panic:反射(reflect):在零值上调用reflect.Value.Set。有什么想法吗?https://play.golang.org/p/IJvA_J_cD60packagemainimport("fmt""reflect")typeMyStructstruct{MyField*string}funcmain(){s:=MyStruct{}v:=reflect.ValueOf(s)fori:=0;i非常感谢! 最佳答案 程序有两个问题。无法设置该字段,因为

tcp - 在 go 中通过套接字发送 int64 的正确方法

我正在尝试在golang中通过TCP发送一个int64,但是,我的接收器打印得到的数字与我发送的数字不同。实现此目的的正确方法是什么?//Bufferonbothclientandserverbuffer:=make([]byte,1024)//SenderfileInfo,error:=os.Stat(fileName)iferror!=nil{fmt.Println("Erroropeningfile")}varfSizeint=int(fileInfo.Size())connection.Write([]byte(string(fSize)))//Receiverconnecti

arrays - 在golang中通过引用传递数组

我有C背景,以C风格传递数组会导致错误。packagemainimport"fmt"funcf(a*int){fmt.Println(a[1])}funcmain(){vara[100]inta[1]=100f(a)}错误::不能在f的参数中使用(type[100]int)作为类型*int 最佳答案 正如其他人在评论中提到的,您可能想要使用slice而不是数组。slice已经通过引用传递,因此无需指定指针。下面的make语句创建了一个整数片段(由数组支持)。在下面的代码中,我给它的长度为2,容量为100,以满足您分配给索引1的目标。

function - 如何在 Go 中通过反射测试一组函数?

我必须为几个具有相似签名和返回值(一个对象和一个错误)的函数编写单元测试,它们必须通过相似的测试条件。我想避免写:funcTestFunc1(t*testing.T){//testsonreturnvalues}funcTestFunc2(t*testing.T){//testsidenticalforFunc1}funcTestFunc3(t*testing.T){//testsidenticalforFunc1}...(有关更完整的上下文,请参阅thisgoplaygroundexample)(是的,goplayground还不支持gotest,只支持gorun,issue6511

debugging - 如何在 Delve 中通过源文件行号设置断点?

标题几乎说明了一切。我知道如何设置的唯一方法是在程序运行期间或在breakpointmain.main之前有没有一种方法可以通过行号来做到这一点,比如breakpoint./otherfile.go:200? 最佳答案 在你的源代码类型中runtime.Breakpoint()在CLI中输入dlvtest然后continue程序将在您设置断点的代码行处停止。 关于debugging-如何在Delve中通过源文件行号设置断点?,我们在StackOverflow上找到一个类似的问题: