草庐IT

go-mocket

全部标签

go - 为什么 sync.WaitGroup、sync.Mutex 不引用 channel 、 slice 等类型?

如果Waitgroups和Mutex总是需要通过引用传递,我们不能把它做成引用类型(禁止使用它们作为值传递)吗?我的意思是有没有我们需要使用它们按值传递的用例? 最佳答案 当您将任何参数作为值传递时,该值将被复制。这些参数的任何修改都将在func中进行。当func退出时,这些更改将消失。在WaitGroup或Mutex的情况下你不想要这个,因为你想共享状态。如果所有修改都是本地的,您将无法同步任何内容,因为您将拥有许多具有不同状态的不同副本。一个有效的情况可能是您想要复制一个WaitGroup或Mutex,但那将是非常隐含的代码并且

go - 鸭子打字 : How to implicitly convert from an interface to another interface in go

我是新手,我希望在用户和提供者之间使用(非常)松散耦合的API制作两个包。为此,我希望利用go的隐式实现接口(interface)和隐式转换的能力。提供者和用户都有自己定义的接口(interface)(例如,提供者返回一个提供者.A,用户接受一个用户.A)。使用这种模式,我可以从一种类型转换为另一种类型,而不是从另一个包中导入接口(interface)。这适用于简单的接口(interface),但一旦方法将接口(interface)作为输入,从一种类型到另一种类型的转换就变得不可能了。为什么go不允许这种转换?有什么解决方法吗?工作示例:packagemain//Providertyp

go - 带有 http.SetCookie 的无效内存地址

我正在开发一个名为persona的授权包。除一件事外一切正常,当我尝试设置cookie时,我有一个无效的内存地址。funcSignup(userinterface{},usernamestring,whttp.ResponseWriter)error{key:=[]byte(randStringBytes(32))encrypted,err:=encrypt(key,username)iferr!=nil{returnerr}expiration:=time.Now().Add(365*24*time.Hour)cookie:=http.Cookie{Name:"session-per

go - 如何解析json数组结构

我使用下面的代码没有成功解析json值,但是它的内部数组[]https://play.golang.org/p/5HdWeyEtviepackagemainimport("encoding/json""fmt")varinput=`[{"created_at":"ThuMay3100:00:01+00002012"},{"created_at":"ThuMay3100:00:01+00002012"}]`funcmain(){varvalmap[string]interface{}iferr:=json.Unmarshal([]byte(input),&val);err!=nil{pa

go - 循环导入和缺乏泛型令人头疼

假设我在golang中有这两个文件://main/a/a.goimport"main/b"typeModelstruct{IDint`json:"id"`Meint`json:"me"`Youint`json:"you"`}funczoom(vb.Injection){}funcStart(){//...}然后第二个文件看起来像://main/b/b.goimport"main/a"typeInjectionstruct{ModelAa.Model}funcGetInjection()Injection{returnInjection{ModelA:a.Start(),}}如您所见,这

go - 如何检查结构中是否存在结构值

我正在从API检索数据。结构输出是:{StreamSpecification:{StreamEnabled:true,StreamViewType:"NEW_AND_OLD_IMAGES"},TableStatus:"ACTIVE"}但是如果API输出中没有StreamSpecification,我在尝试打印结构时会收到以下错误。panic:运行时错误:无效内存地址或零指针解引用[信号SIGSEGV:分段违规代码=0x1地址=0x0pc=xxxxxxxx]如何检查值中是否存在structStreamSpecification?或者如何以任何其他方式解决问题?

go - 在这一行 "bintag"binary")"之后分配给 "binTag := field.Tag.Get("的值是什么"",其中字段是 GOLang 中的结构字段之一

当我遇到这一行时,我正在尝试分析GO程序"binTag:=field.Tag.Get("binary")"我对“binTag”将被分配的值感到困惑。我在GOreflectPackage中搜索语法解释,我找到了这个,func(tagStructTag)Get(keystring)字符串Get返回与标签字符串中的键关联的值。如果标签中没有这样的键,Get返回空字符串。如果标签没有常规范式,则Get返回的值是未指定的。要确定标记是否明确设置为空字符串,请使用Lookup。然后我搜索了Golang中的Tag是什么意思,作为例子我得到了这个标记字段声明后可以跟一个可选的字符串文字(标记),它成为

go - 如何传递端口值以使用 exec 和 syscall 包 golang 启动服务器

我们正在尝试在go中实现一个程序,该程序从指定路径运行另一个go程序,例如path,_:=exec.LookPath("program-name")接下来我们给出了一组go命令来运行go程序,如args:=[]string{"go","install","&&","-port","18000"}我们将路径和参数与os.Environ()一起传递给syscall.Exec()。为了运行我们正在调用的项目,有一个检查告诉我们-port是必需的。由于-port不是可执行命令,因此它不采用端口值。要求是当我们输入goinstall&&project-name-port19000时程序应该运行。

go - 错误处理中间件抛出运行时错误

我有这个错误处理中间件:funcError(nexthttp.HandlerFunc)http.Handler{returnhttp.HandlerFunc(func(whttp.ResponseWriter,r*http.Request){deferfunc(){iferr:=recover();err!=nil{log.Error("Caughterrorindefer/recovermiddleware:",err)originalError:=err.(struct{OriginalErrorerror}).OriginalErroriforiginalError!=nil{l

go - 如何从嵌套函数修改 struct boolean?

在嵌套函数中设置结构体是行不通的。我已经尝试过文档中的示例:https://play.golang.org/p/Pw9f20zwjatypemyStructstruct{abrakadabrabool}func(f*ChangeMe)SetName(abrakadabrabool){f.abrakadabra=true}funcsomething(){varflagChangeMef:=new(ChangeMe)copy:=func(rio.ReadCloser,wio.WriteCloser){//...somecode..iferr!=nil{f.SetName(true)log.