草庐IT

golang 惯用的方法来检测没有这样的主机错误

我正在使用它,但感觉不对:iferr,ok:=err.(net.Error);ok{varmessagestringiferr.Timeout(){message="Timeout"}elseifstrings.HasSuffix(err.Error(),"nosuchhost"){message="Nosuchhost"}}有没有更惯用的方法? 最佳答案 从Go1.13开始:您可以使用errors.AsvardnsError*net.DNSErroriferrors.As(err,&dnsError){fmt.Println("D

go - 如何以惯用的方式优雅地关闭链接的 goroutines

创建多个goroutines,这些goroutines在以多级方式处理时将具有嵌套goroutines(想象一棵goroutines树,每个级别都可以有很多叶子)。按顺序优雅地关闭这些goroutines并等待它们回来的惯用方法是什么?顺序是底部顶部(最深的child在前)并且假设我不知道我将预先启动多少goroutines(动态)。下面的示例只是以一种非有序的方式优雅地关闭了它们。packagemainimport("context""fmt""time")funcmain(){ctx:=context.Background()ctx,cancel:=context.WithCanc

dictionary - 测试和处理映射中多个键的惯用 Go 方法是什么?

我有一个map[string]string,我需要测试一些键是否存在,如果存在,则将一些值转换为整数。例如:m:=map[string]string{"a":"b","c":"d","e":"f"}ifv1,ok:=m["a"];ok{ifv2,ok:=m["c"];ok{ifi1,err:=strconv.Atoi(v1);err!=nil{ifi2,err:=strconv.Atoi(v2);err!=nil{//dosomethingwithi1,i2}}}}我发现自己的思路是:ifm.exists("a")&&m.exists("c")&&is_int(m["a"])&&is_

go - 在 go 中轮询函数直到 ok != true 的惯用方式

我有一个函数,它在轮询时返回值,但在某些时候将停止返回合理的值,如下所示。有没有比每次检查if!ok更惯用的方式来轮询它。我在想类似于使用range轮询channel的事情。packagemainimport"fmt"funciter()func()(int,bool){i:=0returnfunc()(int,bool){ifi 最佳答案 我认为没有办法避免检查ok,但您可以重组它以避免丑陋的中断:forv,ok:=f();ok;v,ok=f(){fmt.Println(v)}请注意,这仅适用于以下任一情况:您有一个具有多个返回值

go - 检查结构的多个属性的更惯用的方法?

假设我有以下结构:typemyTypestruct{Qid,Interval,RoundNumberstring}而且我必须确保类型为myType的变量的任何属性都没有空字符串值。有没有比执行以下if更惯用的方法:ifaMyType.Qid==""||aMyType.Interval==""||aMyType.RoundNumber==""{//handleerrorsituation}显然if有效,但我想知道Go是否有更好的方法? 最佳答案 您可以在myType上定义一个函数,这样可以更轻松地确定有效性:func(mmyType)

go - 在 go 中枚举字母表的惯用方法是什么?

这可能是最好的方法:fori:='a';i是否有更好/惯用的方法? 最佳答案 for_,c:=range"abcdefghijklmnopqrstuvwxyz"{fmt.Println(string(c))} 关于go-在go中枚举字母表的惯用方法是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/19086263/

go - 调用后获取操作系统错误的惯用方法

如果我这样做s,err:=os.Stat(path)和err!=nil我需要知道该文件是否不存在或者我没有权限访问它,等等。如何获取底层错误代码?阅读os包文档似乎建议我阅读错误字符串的文本-肯定不是吗? 最佳答案 什么FUZxxlsays.来自os.Statdocumentation:StatreturnsaFileInfodescribingthenamedfile.Ifthereisanerror,itwillbeoftype*PathError.PathError已记录onthesamepage,声明它包含导致错误的操作、导

go - (惯用语?)new(T) 和 &T{...} 之间的区别?

我开始玩Go,对new函数有点恼火。它似乎非常有限,尤其是在考虑具有匿名字段或内联初始化的结构时。所以我通读了规范和stumbledoverthefollowingparagraph:Callingthebuilt-infunctionnewortakingtheaddressofacompositeliteralallocatesstorageforavariableatruntime.所以我怀疑new(T)和&T{}的行为方式完全相同,对吗?如果这是正确的,在什么情况下应该使用new? 最佳答案 是的,你是对的。new对结构没那

go - 在 Go 中获取枚举的字符串表示的惯用方法是什么?

如果我有一个枚举:typeDayint8const(MondayDay=iotaTuesday...Sunday)什么是更自然Go获取字符串的方式?功能:funcToString(dayDay)string{...}或方法func(dayDay)String()string{...} 最佳答案 第二个更加地道,因为它满足Stringer界面。func(dayDay)String()string{...}我们在Day类型而不是*Day类型上声明此方法,因为我们没有更改值。它将使您能够写作。fmt.Println(day)并获取Stri

go - 使 websocket 超时的惯用方法。拨入吗?

我有如下代码:_,err:=websocket.Dial("wss://remote-server","","http://localhost")if(err==nil){fmt.Println("Worked!")}else{fmt.Println("Fail")}当remote-server宕机时,超时需要60秒。我找到了websocket.SetDeadline(http://godoc.org/code.google.com/p/go.net/websocket#Conn.SetDeadline),但我还没有应用它的连接。我可以将Config传递给DialConfig,但我看不