草庐IT

is_transient

全部标签

go - 大量 transient 对象 - 避免争用

我有一个用Go编写的新TCP服务器,有100多个客户端连接到它。每个客户端都需要集中查看数据流,因为他们正在查看来自不同位置的电波上的radio数据包,然后进行分析。该代码有效,但我看到围绕锁定有很多争用和增加的CPU,并且在思考如何避免锁定(如果可能)或围绕它进行优化之后。当TCP服务器为接收到的每个数据包启动GoRoutine时,addMessage函数需要一定程度的同步。稍后还会在另一个函数中分析这些数据包,该函数在map上执行RLock()。每秒被调用一次的cullMessages()函数真正陷入困境并可能真正变慢,有时需要2-3秒才能运行,这使问题更加复杂接下来的2-3个操作

docker - 去构建 : build output "api" already exists and is a directory

我正在尝试使用CompileDaemon热重载使用Docker的go项目。我的文件夹结构如下所示my-api-server-main.go-Dockerfile-docker-compose.yml-Makefile这是我得到的错误:gobuildgithub.com/firstApi/test-platform/lib/my-api/server:构建输出“server”已经存在并且是一个目录这是我的dockerfile的样子FROMgolang:1.12-stretchENVGO111MODULE=onWORKDIR/go/srcCOPYgo.mod.COPYgo.sum.RUNg

gorename : What is a 'DO NOT EDIT' marker?

我正在使用vscode并尝试重命名变量名称。它没有说:Renamefailed:gorename:cannotrenameidentifiersingeneratedfilecontainingDONOTEDITmarker:/home/adam/go/src/hello/hello.go那么什么是DONOTEDIT标记?为什么它在那里,我怎样才能删除它以便gorename可以做它的事情?我的文件是这样开始的:packagemain//#cgoCFLAGS:-g-Wall//#include//#include"c/greet.h"import"C"import("encoding/j

mysql - 无法连接到 DB : database is closed

我有以下项目结构:-main.go-db--dbinit.go在dbinit.go中,我有以下代码:packagedbimport("database/sql"_"github.com/go-sql-driver/mysql")varDb*sql.DBvarerrerrorfuncinit(){Db,err=sql.Open("mysql","myDBCreds")deferDb.Close()}在main.go中我有:packagemainimport(db"./db")funcmain(){deferdb.Db.Close()sqlStatement:=`INSERTINTOtab

go - 错误 "protoc-gen-go: program not found or is not executable"

我正在尝试使用Go构建示例应用程序gRPC,但我无法使用“协议(protocol)”生成代码我已经使用以下方法安装了所需的库和Go包:goget-ugoogle.golang.org/grpcgoget-ugithub.com/golang/protobuf/protoc-gen-go我也试过设置路径,但没有成功。示例“原型(prototype)”文件:syntax="proto3";packagegreet;optiongo_package="greetpb";serviceGreetService{}错误信息:"protoc-gen-go:programnotfoundorisno

转到 : channel is necessary in this case?

http://play.golang.org/p/Xn3Qw7xAi3很难理解channel。我有funcmain(){in:=make(chanint)out:=make(chanint)goQuickSort(in,out)fori:=0;i这使得名为in、out和goroutine的两个channel成为函数Quicksort。1.QuickSort如何将in和out作为参数?它是否从下面的线路接收?in2。这种情况下使用channel是最佳的吗?动态地接收值看起来非常整洁……如果没有channel进行排序会有什么不同?这种情况更快? 最佳答案

select - golang : channel in select statement is only receiving sometimes (? ??)

我在从两个channel接收的go例程中有一个select语句。for{fmt.Printf("Waitingforselectstatement...\n")select{casereq:=如果调用函数两次发送到第一个channel然后发送到第二个channel一切正常:requestChan控制台输出(正确)是:>Waitingforselectstatement...>Igotarequest:{Loginyaylaswiese}>Waitingforselectstatement...>SendingtruetothedoneChannel>Igotarequest:{Sign

time - 戈朗 : throttle (time delay) function is not working in goroutine (works fine in main thread)

所以我正在编写一个实用程序来查询工作中的API,它们将每10秒限制为20次调用。很简单,我会将我的通话时间限制在自上次通话后至少0.5秒。在我尝试使用goroutine之前,我的Throttle实用程序运行良好。现在我正在使用结构/方法组合:func(c*CTKAPI)Throttle(){ifc.Debug{fmt.Println("\t\t\tEnteringThrottle()")}for{//incasesomethingelsemakesacallwhilewe'resleeping,weneedtore-checkift:=time.Now().Sub(c.LastCall

reflection - 反射(reflect) : Is it possible to get the underlying typed type information?

我正在从go/ast移植一个程序至reflect.为了通过测试,我不仅需要获取顶级类型信息,还需要获取基础类型(如果基础类型不是内置的)。在下面的例子中,程序是否可能知道main.T的底层类型是main.TT?packagemainimport"fmt"import"reflect"funcmain(){typeTTinttypeTTTx:=T(0)fmt.Println(reflect.TypeOf(x))}输出:main.T 最佳答案 main.T的底层类型是int,而不是main.TT。反射包不知道main.T是用main.T

戈朗 : Is a network condition can make a net/http HandleFunc to panic?

想想我有一个关键函数,它应该全部运行或不运行。TakeMoneyFromSomeone()GiveMoneyToSomeoneElse()我的问题是:我可以相信Go函数在使用`net/http.HandleFunc时不会在第1行和第2行之间出现panic吗?(这两个函数在我的http处理程序中)我只关注网络问题。例如:如果客户端断开连接、超时或正文太长,或其他任何情况。有什么网络问题会使服务器在line1和line2之间崩溃?(那两条线不使用网络)如果答案是否。如果我尝试ResponseWriter.write到关闭连接的客户端,会发生什么情况。会不会panic?