草庐IT

惯用语

全部标签

go - Go 中的惯用过滤错误

Go中的error类型非常广泛,实际包含的类型可能因平台和版本而异。通过错误的字符串值error.Error()过滤我们预期的错误是否符合习惯?例如:_,err:=conn.Write(b)iferr!=nil{if!strings.Contains(err.Error(),"peerreset"){log.Print(err)}return}有更好的方法吗? 最佳答案 我不确定我在说什么你不知道,但我已经看到了一些处理它的方法:与导出并出现在godoc中的已知实例进行比较,比如io.EOF或os.ErrNotExist;当文档pr

go - 将非接口(interface)称为 "*er"是惯用的吗

"EffectiveGo"状态:Byconvention,one-methodinterfacesarenamedbythemethodnameplusan-ersuffixorsimilarmodificationtoconstructanagentnoun:Reader,Writer,Formatter,CloseNotifieretc.bufio.io包包含这个://Readerimplementsbufferingforanio.Readerobject.typeReaderstruct{buf[]byterdio.Readerr,winterrerrorlastByteint

go - 将非接口(interface)称为 "*er"是惯用的吗

"EffectiveGo"状态:Byconvention,one-methodinterfacesarenamedbythemethodnameplusan-ersuffixorsimilarmodificationtoconstructanagentnoun:Reader,Writer,Formatter,CloseNotifieretc.bufio.io包包含这个://Readerimplementsbufferingforanio.Readerobject.typeReaderstruct{buf[]byterdio.Readerr,winterrerrorlastByteint

go - 可接受的 Golang 惯用嵌套错误处理?

我最近开始接触Go并且看到了很多关于如何进行错误处理的讨论。我看到的布局如下:err:=DoSomething()iferr!=nil{//handle}//continue通常在管理amqp连接时,我的条件是只有在错误为零时我才想继续,因为那时我需要对连接做一些事情:c,err:=Connect()iferr!=nil{returnnil,err}s,err:=c.RegisterSomethingOnConnection()iferr!=nil{returnnil,err}val,err:=s.DoSomething()returnval,err如您所见,如果Connect()返回

go - 可接受的 Golang 惯用嵌套错误处理?

我最近开始接触Go并且看到了很多关于如何进行错误处理的讨论。我看到的布局如下:err:=DoSomething()iferr!=nil{//handle}//continue通常在管理amqp连接时,我的条件是只有在错误为零时我才想继续,因为那时我需要对连接做一些事情:c,err:=Connect()iferr!=nil{returnnil,err}s,err:=c.RegisterSomethingOnConnection()iferr!=nil{returnnil,err}val,err:=s.DoSomething()returnval,err如您所见,如果Connect()返回

go - 当编写一个包用作命令时,这是惯用的 : name all identifiers as private or name all identifiers as public?

在Go中,公共(public)名称以大写字母开头,私有(private)名称以小写字母开头。我正在编写一个不是库的程序,它是一个单独的包。是否有任何Go习语规定我的标识符应该全部公开还是全部私有(private)?我不打算将这个包用作库或作为应该从另一个Go程序导入的东西。我想不出我想要混合物的任何理由。它“感觉”好像完全私有(private)化是正确的选择。我认为我没有得到任何具体的答案,但Nate最接近告诉我要考虑“导出与非导出”而不是“公共(public)和私有(private)”。这让我相信不导出任何东西是最好的方法。在最坏的情况下,如果我最终从另一个包中的应用程序导入代码,我

go - 当编写一个包用作命令时,这是惯用的 : name all identifiers as private or name all identifiers as public?

在Go中,公共(public)名称以大写字母开头,私有(private)名称以小写字母开头。我正在编写一个不是库的程序,它是一个单独的包。是否有任何Go习语规定我的标识符应该全部公开还是全部私有(private)?我不打算将这个包用作库或作为应该从另一个Go程序导入的东西。我想不出我想要混合物的任何理由。它“感觉”好像完全私有(private)化是正确的选择。我认为我没有得到任何具体的答案,但Nate最接近告诉我要考虑“导出与非导出”而不是“公共(public)和私有(private)”。这让我相信不导出任何东西是最好的方法。在最坏的情况下,如果我最终从另一个包中的应用程序导入代码,我

generics - 在 Go 中实现通用映射器的惯用方法

这个问题在这里已经有了答案:Shortwaytoapplyafunctiontoallelementsinalistingolang(5个答案)关闭5个月前。假设我想编写一个函数来检查谓词是否与slice中的元素匹配:funcIsIn(array[]T,predfunc(eltT)bool)bool{for_,obj:=rangearray{ifpred(obj){returntrue;}}returnfalse;}显然,前面的代码无法编译,因为T不存在。我可以将其替换为一些interface{},如下所示:funcIsIn(array[]interface{},predfunc(el

generics - 在 Go 中实现通用映射器的惯用方法

这个问题在这里已经有了答案:Shortwaytoapplyafunctiontoallelementsinalistingolang(5个答案)关闭5个月前。假设我想编写一个函数来检查谓词是否与slice中的元素匹配:funcIsIn(array[]T,predfunc(eltT)bool)bool{for_,obj:=rangearray{ifpred(obj){returntrue;}}returnfalse;}显然,前面的代码无法编译,因为T不存在。我可以将其替换为一些interface{},如下所示:funcIsIn(array[]interface{},predfunc(el

json - 使用自定义 MarshalJSON() 方法嵌入结构的惯用方法

给定以下结构:typePersonstruct{Namestring`json:"name"`}typeEmployeestruct{*PersonJobRolestring`json:"jobRole"`}我可以按预期轻松地将Employee编码为JSON:p:=Person{"Bob"}e:=Employee{&p,"Sales"}output,_:=json.Marshal(e)fmt.Printf("%s\n",string(output))输出:{"name":"Bob","jobRole":"Sales"}但是当嵌入式结构具有自定义MarshalJSON()方法时...fu