草庐IT

go-mocket

全部标签

go - Go中的二级缓存(内存+redis)实现

我正在尝试写一个二级缓存(内存+redis),但是当一个key高并发访问时遇到了瓶颈,我尝试对每个key都使用mutex,但是这样增加了cpu很多因为loadFromDB需要100-200毫秒。func(s*Store)GetJsonObjectWithExpire(keystring,objinterface{},ttlint,fStoreLoadFunc)error{//firstreadfrommemoryv,ok:=s.mem.Get(key)ifok{ifv.Outdated(){to:=deepcopy.Copy(obj)gos.updateMem(key,to,ttl,f

go - 附加两个数组的通用函数

无法弄清楚如何将从函数返回的interface{}转换为结构数组作为一些练习的一部分,我试图创建一个函数,它可以接受2个某种类型的slice并将两者连接起来并返回slice。代码可以在这里找到-https://play.golang.org/p/P9pfrf_qTS1typemystructstruct{namestringvaluestring}funcappendarr(array1interface{},array2interface{})interface{}{p:=reflect.ValueOf(array1)q:=reflect.ValueOf(array2)r:=refl

go - 从 io.Reader 在 golang 中解码 json 中的枚举

我在json中有一个字段是abc或def我想确保当我解码数据时它会检查该字段是否只包含其中一个2个有效值,有没有办法在golang中做到这一点而无需临时检查?我知道如果我有字节中的json,我可以做到这一点const(Enum1="abc"Enum1="def")func(s*MyJsonStruct)UnmarshalJSON(data[]byte)error{typeAuxMyJsonStruct;vara*Aux=(*Aux)(s);err:=json.Unmarshal(data,&a)iferr!=nil{returnerr}ifs.Key!=Enum1&&s.Key!=En

go - 是否可以将 Go Task runner 配置为使用文件扩展名 yaml?

是否可以配置Go任务运行器(https://taskfile.dev/)以使用文件扩展名为“yaml”而不是“yml”的文件? 最佳答案 任务作者在这里。目前唯一的方法是运行:task--taskfile=Taskfile.yaml或task-tTaskfile.yaml也就是说,有一个openissue和一个openPR关于使.yaml扩展自动工作,因此最终将在没有标志的情况下工作。 关于go-是否可以将GoTaskrunner配置为使用文件扩展名yaml?,我们在StackOverf

go - 在 go 中使用 Telnet 客户端读取数据

我正在尝试通过telnet协议(protocol)从某些设备读取数据,下面是我的简单代码。我只想打印一些有意义的结果。packagemainimport("fmt""github.com/reiver/go-telnet")funcmain(){conn,_:=telnet.DialTo("10.253.102.41:23")fmt.Println(conn)}但这就是我通过这种方式得到的:&{0xc0000060280xc0000047200xc000040640} 最佳答案 很明显,它让你&{0xc0000060280xc000

go - Go中应该如何设置单例状态? (或者,为什么这不起作用?)

这个问题在这里已经有了答案:Howtosetandgetfieldsinstruct'smethod(3个答案)关闭3年前。除了关于是否应该使用单例的任何讨论(是的,我知道,反模式,我已经选择不使用它),我很困惑为什么这不起作用。我尝试在单例实例中设置状态,但我的方法实际上并未修改主实例。保留的是我在实例化单例时传递的任何初始化。起初我以为这是一个嵌套的结构问题,因为我从foo中的bar开始,但后来发现它对原始val。在偶然的情况下,我在MacOSMojave上运行Go1.12.7。packagemainimport("fmt""sync")typefoostruct{valintst

go - 在 go 项目中使用 cgo 包含 libsodium 失败

我正在尝试包含libsodium进入我的Go项目。为此,我在我的项目中复制了repo//#cgoCFLAGS:-I/mypath/libsodium/src/libsodium/include/sodium//#include//#include"crypto_sign_ed25519.h"import"C"尝试构建项目时出现以下错误:/tmp/go-build/cgo-gcc-prolog:53:undefinedreferenceto`crypto_sign_ed25519_pk_to_curve25519'collect2:error:ldreturned1exitstatus可

go - 编译完成,退出代码为 2

我正在尝试运行此处的示例:https://github.com/kubernetes/client-go/tree/master/examples/in-cluster-client-configuration我已经设置了我的GOROOT和GOPATH,但仍然有问题。当我运行构建时,我看到以下错误。GOROOT=/usr/lib/golang#gosetupGOPATH=/home/sbadakhc/go#gosetup/usr/lib/golang/bin/gobuild-o/tmp/___go_build_main_go/home/sbadakhc/go/src/github.co

go - 如何修复链码中的 "syntax error: unexpected shim, expecting comma or )"?

我有链码,它应该加密数据并放入分类帐并进行查询。我已经更新了fabric二进制文件,但在其他fabric样本链码中,这一行是相同的,没有任何错误。func(s*SmartContract)queryPatient(APIstubshim.ChaincodeStubInterface,args[]string)sc.Response{iflen(args)!=1{returnshim.Error("Incorrectnumberofarguments.Expecting1")}patientAsBytes,err:=fc.Decrypter(APIstub,args[0])iferr!=

go - 消失的结构组件的赋值

我正在尝试创建一个结构列表并为列表中每个结构的组件赋值:packagemainimport("fmt";"strconv")typeMystructstruct{codestringvalint}varstlist[]Mystruct//Needtocreatethislistfuncmain(){//Tryingtocreatelistofstructuresandassigningvalues:fori,_:=range[3]int{}{varst=Mystruct{}stlist=append(stlist,st)st.val=ist.code="code_"+strconv.I