草庐IT

go-mocket

全部标签

go - 获取 slice 中值的指针

有什么办法可以得到指向slice中实际值的指针吗?我在map中有一棵优惠树:map[uint64]map[uint16][]offer为了通过id(从1到n)快速访问,我需要一片指针:[]*offer实际报价位于第一棵树中,slice中应该是指向实际报价的指针。我不能遍历树并收集实际值的指针,因为这个slice的range给我一个副本,但我总共有超过数十亿个这样的结构,副本会导致浪费我的内存:一个结构的40个字节会导致100+gb以及future更多。我还需要在树中存储连续的值片段,以便事实查找报价。可能有一些方法可以使用unsafe或reflect包来获取这些指针?指针索引只构建一次

go - 为什么浮点加法不精确?

这个问题在这里已经有了答案:Isfloatingpointmathbroken?(31个答案)Whyarefloatingpointnumbersinaccurate?(5个答案)关闭3年前。我发现了以下奇怪的行为。添加一些float会导致“随机”准确度。所以我先跑go版本go1.12darwin/amd64在带有Inteli72,6Ghz的macOSMojave(10.14.3)上行为发生在以下示例中:funcTestFloatingAddition(t*testing.T){f1:=float64(5)f2:=float64(12.1)f5:=float64(-12.1)f3:=f

go - 无内存泄漏的调度任务

我使用golangnewTicker创建了一个每10秒运行一次的调度程序。每个tick都会创建一个新的goroutine,该goroutine会执行一些内存密集型任务,但会在10秒内完成。我已经在kubernetes中部署了它。容器同时具有调度程序和http服务器。HTTP服务器将接受单个请求并运行一次计划。这是为了重试手动错过的任务。代码如下:funcstartScheduledTask(){fmt.Println("TaskStarted...",time.Now())ticker:=time.NewTicker(10*time.Second)deferticker.Stop()f

unit-testing - 错误 : suite. go:61: test paniced: reflect: Call with too few input arguments

我正在golang中设置单元测试。但是现在我在运行gotest-v时遇到错误。我想解决这个错误并使测试成功。article├client├api│├main.go│├contoroller││├contoroller.go││└contoroller_test.go│├service││├service.go││└service_test.go│├dao││├dao.go││└dao_test.go│├s3││├s3.go││└s3_test.go│├go.mod│├go.sum│└Dockerfile├nginx└docker-compose.yml现在我正在为service.go设

go - 将浮点字符串转换为int

Closed.Thisquestionneedsdetailsorclarity。它当前不接受答案。想改善这个问题吗?添加详细信息,并通过editingthispost阐明问题。2年前关闭。Improvethisquestion我的服务以字符串形式接收价格,例如“12.34”。我必须将其保存为美分(db),因此必须为1234。以下解决方案安全吗?安全意味着结果始终相同且正确。“12.34”必须为1234,但不能为1235或1233。s:="12.34"f,_:=strconv.ParseFloat(s,64)i:=int(100*f)(我这里不处理错误,因为问题不在于错误处理)

Go函数写入同一个 map

我正在尝试熟悉goroutines。我编写了以下简单程序来将1-10的数字平方存储在map中。funcmain(){squares:=make(map[int]int)varwgsync.WaitGroupfori:=1;i最后,它会打印一张空map。但是在go中,map是通过引用传递的。为什么打印一张空map? 最佳答案 正如评论中指出的,您需要同步对map的访问,您对sync.WaitGroup的使用不正确。试试这个:funcmain(){squares:=make(map[int]int)varlocksync.Mutexva

go - 当您从一个 channel 读取并推送到另一个 channel 时,您如何编写一个不会挂起的函数

考虑这样一个函数:func(sc*saramaConsumer)ConsumeClaim(sesssarama.ConsumerGroupSession,claimsarama.ConsumerGroupClaim)error{formsg:=rangeclaim.Messages(){sc.messages 最佳答案 //wecanusecontexttoexitwhensomeonecalledcontextcancel.func(sc*saramaConsumer)ConsumeClaim(sesssarama.Consume

go - goroutines的执行顺序

我对golang很陌生。我的理解是,所有的go-routines都会同时执行。两个匿名goroutines将同时开始执行。但是当我运行这段代码时,它总是打印a=1firstexecuteda=1secondexecutedpanic:b!=1不应该打印a=1a=1firstexecutedResponsetrueandsoon或b=1b=1firstexecutedResponsetrueandsoon既然向channel发送了一个值后,相应的协程应该阻塞并等待接收者?funcmain(){vara,bintvarc=make(chanbool)gofunc(){b=1fmt.Prin

go - 如何同时遍历 N 个文件以计算唯一单词的出现次数

这是我计算文件中所有唯一单词出现次数的代码:packagemainimport("bufio""fmt""log""os")funcmain(){file,err:=os.Open("file1.txt")iferr!=nil{log.Fatal(err)}words:=make(map[string]int)/*askingscannertosplitintowords*/scanner:=bufio.NewScanner(file)scanner.Split(bufio.ScanWords)count:=0//scantheinpurtforscanner.Scan(){//get

go - 从 goroutine 中的缓冲 channel 读取时的执行顺序

我在研究并发和缓冲channel时遇到了以下让我感到困惑的问题:https://play.golang.org/p/wir7wP2u-yf为什么函数echo中channel(大小为3)的“卸载”会发生在包含4的情况下?为什么5发送到channelc后,channel容量一直为0?为什么没有回显10?packagemainimport"fmt"funcecho(cchanint){fornum:=rangec{//fmt.Printf("lengthofchannelc:%v\n",len(c))fmt.Println(num)}fmt.Println("Doneiterating")}