草庐IT

惯用语

全部标签

Golang 惯用的错误处理

我为独立和嵌入式使用(例如使用CustomerRepository)创建了一个“基础”存储库结构,以避免一直检查错误,并为Gorp(数据库工具包)创建抽象,并创建API更符合我的喜好。我检查这个基本结构中的错误,如果发现一个错误,就panic,好像在我看来确实存在一个错误,然后表明一个开发错误,代码也可能panic,因为验证等应该在数据获取之前发生到存储库。我发现了这个问题GoErrorHandlingTechniques,但它不包括像我所做的那样在基本结构中包装错误并且只是panic。我所做的是否是惯用的Go?packagerepositoriesimport("github.com

Golang 惯用的错误处理

我为独立和嵌入式使用(例如使用CustomerRepository)创建了一个“基础”存储库结构,以避免一直检查错误,并为Gorp(数据库工具包)创建抽象,并创建API更符合我的喜好。我检查这个基本结构中的错误,如果发现一个错误,就panic,好像在我看来确实存在一个错误,然后表明一个开发错误,代码也可能panic,因为验证等应该在数据获取之前发生到存储库。我发现了这个问题GoErrorHandlingTechniques,但它不包括像我所做的那样在基本结构中包装错误并且只是panic。我所做的是否是惯用的Go?packagerepositoriesimport("github.com

concurrency - 使用共享 map 的不错的惯用方式

假设我有一个程序可以同时访问map,如下所示:funcgetKey(r*http.Request)string{...}values:=make(map[string]int)http.HandleFunc("/get",func(whttp.ResponseWriter,r*http.Request){key:=getKey(r)fmt.Fprint(w,values[key])})http.HandleFunc("/set",func(whttp.ResponseWriter,r*http.Request){key:=getKey(r)values[key]=rand.Int()}

concurrency - 使用共享 map 的不错的惯用方式

假设我有一个程序可以同时访问map,如下所示:funcgetKey(r*http.Request)string{...}values:=make(map[string]int)http.HandleFunc("/get",func(whttp.ResponseWriter,r*http.Request){key:=getKey(r)fmt.Fprint(w,values[key])})http.HandleFunc("/set",func(whttp.ResponseWriter,r*http.Request){key:=getKey(r)values[key]=rand.Int()}

multithreading - 这是Go中的惯用工作线程池吗?

我试图用goroutines写一个简单的工作池。我写的代码是惯用的吗?如果没有,那应该改变什么?我希望能够将工作线程的最大数量设置为5,并在所有5个忙时都阻塞直到工作线程可用。我如何将其扩展为最多只能容纳5名worker?我是否会生成5个静态goroutine,并给每个work_channel?代码:packagemainimport("fmt""math/rand""sync""time")funcworker(idstring,workstring,ochanstring,wg*sync.WaitGroup){deferwg.Done()sleepMs:=rand.Intn(100

multithreading - 这是Go中的惯用工作线程池吗?

我试图用goroutines写一个简单的工作池。我写的代码是惯用的吗?如果没有,那应该改变什么?我希望能够将工作线程的最大数量设置为5,并在所有5个忙时都阻塞直到工作线程可用。我如何将其扩展为最多只能容纳5名worker?我是否会生成5个静态goroutine,并给每个work_channel?代码:packagemainimport("fmt""math/rand""sync""time")funcworker(idstring,workstring,ochanstring,wg*sync.WaitGroup){deferwg.Done()sleepMs:=rand.Intn(100

go - 如何以惯用的方式预分配和填充一片指针?

http://play.golang.org/p/j-Y0mQzTdPpackagemainimport"fmt"typeUselessStructstruct{aintbint}funcmain(){mySlice:=make([]*UselessStruct,5)fori:=0;i!=5;i++{mySlice=append(mySlice,&UselessStruct{})}fmt.Println(mySlice)}输出:[0xc0100351600xc0100351700xc0100351800xc0100351900xc0100351a0]我想做的是为5个无用结构预分配内存,

go - 如何以惯用的方式预分配和填充一片指针?

http://play.golang.org/p/j-Y0mQzTdPpackagemainimport"fmt"typeUselessStructstruct{aintbint}funcmain(){mySlice:=make([]*UselessStruct,5)fori:=0;i!=5;i++{mySlice=append(mySlice,&UselessStruct{})}fmt.Println(mySlice)}输出:[0xc0100351600xc0100351700xc0100351800xc0100351900xc0100351a0]我想做的是为5个无用结构预分配内存,

go - 惯用的 Golang 协程

在Go中,如果我们的类型具有启动某种循环机制(轮询A并永远执行B)的方法,最好将其表示为://Rundoesstuff,youprobablywanttorunthisasagoroutinefunc(tType)Run(){//Dolong-runningstuff}并记录这可能希望作为goroutine启动(并让调用者处理)或者对调用者隐藏这个://Rundoesstuffconcurrentlyfunc(tType)Run(){goDoRunStuff()}我是Go新手,不确定约定是让调用者使用“go”前缀还是在代码设计为异步运行时为调用者​​做前缀。我目前的观点是我们应该记录并

go - 惯用的 Golang 协程

在Go中,如果我们的类型具有启动某种循环机制(轮询A并永远执行B)的方法,最好将其表示为://Rundoesstuff,youprobablywanttorunthisasagoroutinefunc(tType)Run(){//Dolong-runningstuff}并记录这可能希望作为goroutine启动(并让调用者处理)或者对调用者隐藏这个://Rundoesstuffconcurrentlyfunc(tType)Run(){goDoRunStuff()}我是Go新手,不确定约定是让调用者使用“go”前缀还是在代码设计为异步运行时为调用者​​做前缀。我目前的观点是我们应该记录并