草庐IT

go-mocket

全部标签

memory - Go: time.sleep 和内存使用

当运行下面的代码时,程序从1.5M左右开始,然后逐渐增长到6.4M。我想知道为什么。删除time.sleep可解决此问题。有没有办法在默认情况下使用for-select模式并在默认情况下休眠一段时间而不更改任何内存?在sleep后调用runtime.GC()确实可以解决问题。我们可以在不调用GC的情况下实现同样的事情吗?packagemainimport("time")funcmain(){c:=make(chanstruct{})for{select{case同上:packagemainimport("time")funcmain(){c:=make(chanstruct{})for

go - 补丁标准包

我想替换标准Go库中的一些函数(特别是os.Exit)。我可以这样做吗?我试过:myExitValue:=reflect.ValueOf(func(){fmt.Println("exiting")})reflect.ValueOf(os.Exit).Set(myExitValue)但它会panic:reflect:reflect.Value.Setusingunaddressablevalue 最佳答案 我认为即使在Reflect库的帮助下,您尝试做的事情也无法实现。通过从另一个包调用Go的函数/方法,您正在调用原始代码的副本。您将

go - 在项目中构建所有go包

我正在制作一个包含一些包的Go项目。这些是数据结构(也会有算法)。我的项目根目录如下所示:C:.├───array├───binary_tree├───heap└───list问题是,我想添加一个CI。所以我会有一份工作来检查是否所有的包都构建了,如果所有的测试都通过了。不幸的是,我无法在项目根目录上运行gobuild。我必须通过整个路径。我的意思是我可以编写一个脚本来调用gobuildX/Y/foo然后gobuildX/Y/bar,但是GitLab上的CI(dockerimage)赢了没有那些路径,它只会gitclone我的repo就是这样(因为我不能在项目根目录的相对路径上运行它,

go - 谁能举例说明 panic 和 error 之间的确切区别以及何时在 go 中使用它们?

我已经研究了panic和error之间的区别很长时间了,但不幸的是我还没有找到确切的答案。谁能帮忙? 最佳答案 可以这样想:panic()(一个动词)是一个Actionerror(一个名词)是一个实体一旦遇到错误,您可以对其进行处理(panic()ing只是这里众多选项之一,其他选项会忽略错误,返回错误给调用者或采取一些其他错误特定操作)请注意,您不一定需要error才能panic()。 关于go-谁能举例说明panic和error之间的确切区别以及何时在go中使用它们?,我们在Stac

Go 中的 php json_encode

在php中我有这个:它的结果是:[1,2,3,4]在Go中,当我使用json.Marshal()或jsonEncoder编码方法时,结果是:[1234]这不等同于json_encode()在php中的结果,我无法在php中对其进行解码。在go中有没有达到[1,2,3,4]编码的结果?(每个项目之间有“,”分隔符) 最佳答案 当您使用json.Marshal时,结果将是[1234]但如果您想将结果用作字符串并将其发送到另一个地方(如redis),或者作为有效的json在屏幕上打印,您应该显式地转换你的结果。以下是错误和正确的代码:pa

go - Golang中如何处理字节运算符?

我想创建一个缓冲区,其中包含昵称和密码等信息。假设我创建了一个空缓冲区,即000000000000000000000000000000000000到那时我想用数据填充它,比如buffer,所以我得到的结果是08757365726e616d650870617373776f7264这是len.nicknameactual_nicknamelen.passwordpassword现在,在我创建了这样的缓冲区之后,我想将它解析为变量。那看起来像buffer>>nickname(string)>>password(string)我曾经在使用运算符的C++中做过一些东西,但我不确定如何在Golan

go - 新的 TCP 连接抛出 "use of closed network connection",即使它刚刚打开

打开新连接时,我有时会在client.Socket.Read(message)处收到“使用已关闭的网络连接”错误在receive功能。这已经够奇怪了,但真正奇怪的是我在尝试关闭位于close(connection.Data)的已关闭channel时收到错误消息,当客户端通过manager.unregister.我显然在这里遗漏了一些东西,因为我的所有日​​志记录都表明这些是全新且未使用的channel和套接字。有什么想法吗?我使用的是Golang1.10版。typeClientManagerstruct{clientsmap[*types.Client]boolbroadcastcha

bash - `git clone` 到 $GOPATH 没有 `go get` ?

对于格式错误的Go包,这是行不通的:goget-u如何在不使用goget且不手动解析路径的情况下克隆? 最佳答案 为了我的目的写了这个小的shell函数,可能对你也有用:functionglone(){IFS='/'read-r__hostteamrepo用法:$glonehttps://github.com/bradleyfalzon/gopherci 关于bash-`gitclone`到$GOPATH没有`goget`?,我们在StackOverflow上找到一个类似的问题:

go - Stringers 接口(interface)是否仅适用于 golang 中的值接收器

这个问题在这里已经有了答案:puzzlingbehaviorforStringers?(2个答案)关闭4年前。全部:只是一个简单的问题:围棋教程中https://tour.golang.org/methods/18我尝试将String()方法实现为func(ip*IPAddr)String()string{returnfmt.Sprintf("%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3])}我使用了指针接收器,但当它在main()中不起作用时forn,a:=rangeaddrs{fmt.Printf("%v:%v\n",n,a)}仍然显示[127,0,0,1

go - 由于未接来电而导致测试中止

我试图在本地函数内部调用的方法上mock.Expect。当我通过考试时。但当我期望它至少执行一次时,它失败了。此调用之前绝对没有其他代码路径,因此不应失败。我在这里使用方法的简化表示,因为这是一个复杂的测试设置/方法。但这绝对是要点。我的问题是,我的测试是否因为我模拟的方法而失败。期望的不是直接在mock.Expect.AddNumbers(a,b).AnyTimes().Return(&result.sum,nil)函数内部?add_test.goimportresultTestAdditionFunction(t*testing.T){//mocksetupstuff...a:=1